Ich implementiere CallKit in meiner Flutter-App, stoße jedoch auf ein Problem bei der Verarbeitung eingehender Anrufe, wenn die App vollständig geschlossen ist (nicht im Hintergrund ausgeführt wird). Die App funktioniert einwandfrei, wenn sie im Vordergrund oder im Hintergrund läuft – das CallKit wird ausgelöst und der Anrufbildschirm erscheint, wenn ein eingehender Anruf angenommen wird. Wenn die App jedoch geschlossen ist (sie läuft überhaupt nicht im Hintergrund), wird das CallKit nicht ausgelöst, selbst wenn ich einen eingehenden Anruf über eine VoIP-Push-Benachrichtigung erhalte, und die App navigiert nicht zum Anrufbildschirm. Ich habe VoIP-Push-Benachrichtigungen eingerichtet, um die App zu aktivieren, aber CallKit funktioniert nicht wie erwartet, wenn die App vollständig geschlossen ist. Was habe ich versucht? 1. Hintergrundmodi aktivieren: Ich habe Hintergrundabrufe und Push-Benachrichtigungen in Xcode aktiviert, um sicherzustellen, dass die App VoIP-Push-Benachrichtigungen auch dann verarbeiten kann, wenn die App geschlossen ist. 2. Umgang mit VoIP-Push-Benachrichtigungen: Ich habe sichergestellt, dass die App VoIP-Push-Benachrichtigungen empfangen kann und dass der Benachrichtigungshandler ordnungsgemäß konfiguriert ist, um die App aufzuwecken. 3. CallKit mit Push-Benachrichtigungen verwenden: Ich habe CallKit implementiert, um eingehende Anrufe zu verarbeiten, aber es funktioniert nur, wenn die App im Hintergrund oder im Vordergrund läuft.
Erwartete Ergebnisse:
Ich habe erwartet, dass die App aufwacht und den CallKit-Bildschirm anzeigt, wenn eine VoIP-Push-Benachrichtigung empfangen wird, während die App geschlossen ist > und Übergang zur Anrufseite, wo ich kann Nehmen Sie den Anruf an. Tatsächliche Ergebnisse:
Wenn die App geschlossen ist, CallKit wird nicht ausgelöst und die App navigiert nicht zum Anrufbildschirm, selbst nach Erhalt der VoIP-Push-Benachrichtigung. Zusätzliche Informationen:
Ich habe versucht, der Dokumentation zu folgen CallKit und VoIP Push Notifications auf iOS, aber ich kann die App immer noch nicht richtig funktionieren lassen, wenn sie vollständig geschlossen ist. Wenn jemand Erfahrung mit der Handhabung von VoIP-Anrufen und CallKit in Flutter (oder sogar mit nativem iOS-Code) hat, würde ich mich über Hinweise oder Vorschläge dazu freuen So beheben Sie dieses Problem.
Ich implementiere CallKit in meiner Flutter-App, stoße jedoch auf ein Problem bei der Verarbeitung eingehender Anrufe, wenn die App vollständig geschlossen ist (nicht im Hintergrund ausgeführt wird). Die App funktioniert einwandfrei, wenn sie im Vordergrund oder im Hintergrund läuft – das CallKit wird ausgelöst und der Anrufbildschirm erscheint, wenn ein eingehender Anruf angenommen wird. Wenn die App jedoch geschlossen ist (sie läuft überhaupt nicht im Hintergrund), wird das CallKit nicht ausgelöst, selbst wenn ich einen eingehenden Anruf über eine VoIP-Push-Benachrichtigung erhalte, und die App navigiert nicht zum Anrufbildschirm. Ich habe VoIP-Push-Benachrichtigungen eingerichtet, um die App zu aktivieren, aber CallKit funktioniert nicht wie erwartet, wenn die App vollständig geschlossen ist. Was habe ich versucht? 1. Hintergrundmodi aktivieren: Ich habe Hintergrundabrufe und Push-Benachrichtigungen in Xcode aktiviert, um sicherzustellen, dass die App VoIP-Push-Benachrichtigungen auch dann verarbeiten kann, wenn die App geschlossen ist. 2. Umgang mit VoIP-Push-Benachrichtigungen: Ich habe sichergestellt, dass die App VoIP-Push-Benachrichtigungen empfangen kann und dass der Benachrichtigungshandler ordnungsgemäß konfiguriert ist, um die App aufzuwecken. 3. CallKit mit Push-Benachrichtigungen verwenden: Ich habe CallKit implementiert, um eingehende Anrufe zu verarbeiten, aber es funktioniert nur, wenn die App im Hintergrund oder im Vordergrund läuft.
[b]Erwartete Ergebnisse:[/b] Ich habe erwartet, dass die App aufwacht und den [b]CallKit-Bildschirm[/b] anzeigt, wenn eine [b]VoIP-Push-Benachrichtigung[/b] empfangen wird, während die App geschlossen ist > und Übergang zur Anrufseite, wo ich kann Nehmen Sie den Anruf an. [b]Tatsächliche Ergebnisse:[/b] Wenn die App geschlossen ist, [b]CallKit[/b] wird nicht ausgelöst und die App navigiert nicht zum Anrufbildschirm, selbst nach Erhalt der [b]VoIP-Push-Benachrichtigung[/b]. [b]Zusätzliche Informationen: Ich habe versucht, der Dokumentation zu folgen CallKit[/b] und [b]VoIP Push Notifications[/b] auf iOS, aber ich kann die App immer noch nicht richtig funktionieren lassen, wenn sie vollständig geschlossen ist. Wenn jemand Erfahrung mit der Handhabung von [b]VoIP-Anrufen[/b] und [b]CallKit[/b] in [b]Flutter[/b] (oder sogar mit nativem iOS-Code) hat, würde ich mich über Hinweise oder Vorschläge dazu freuen So beheben Sie dieses Problem. [code]import 'dart:async'; import 'dart:developer' as dev; import 'dart:io'; import 'dart:math'; import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:awesome_notifications/awesome_notifications.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter_callkit_incoming/entities/entities.dart'; import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart'; import 'package:legalis/AppUtil.dart'; import 'package:legalis/l10n/support_locale.dart'; import 'package:legalis/notify_controller.dart'; import 'package:legalis/provider/auth/auth_provider.dart'; import 'package:legalis/provider/call/call_provider.dart'; import 'package:legalis/provider/category/category_provider.dart'; import 'package:legalis/provider/chat/chat_detail_provider.dart'; import 'package:legalis/provider/communication/communication_provider.dart'; import 'package:legalis/provider/home/lawyer_report_provider.dart'; import 'package:legalis/provider/language_provider.dart'; import 'package:legalis/provider/localization/localization_provider.dart'; import 'package:legalis/provider/message/message_list_provider.dart'; import 'package:legalis/provider/navigation/navigation_provider.dart'; import 'package:legalis/provider/service/user_service_provider.dart'; import 'package:legalis/provider/user/user_provider.dart'; import 'package:legalis/screens/call/call_page.dart'; import 'package:legalis/screens/pages/home/home_page.dart'; import 'package:legalis/static/call_accept_observer.dart'; import 'package:logger/logger.dart'; import 'package:provider/provider.dart'; import 'package:uuid/uuid.dart'; import 'firebase_options.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; // Bu dosya tüm providerları içeriyor. import 'package:legalis/screens/splash_screen.dart'; import 'package:legalis/screens/auth/login_screen.dart'; import 'package:legalis/screens/pages/message/message_page.dart'; import 'package:legalis/screens/pages/profile/profile_page.dart'; import 'package:legalis/screens/pages/call/call_history.dart'; import 'package:legalis/wrapper/main_wrapper.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
int getUniqueNotificationId() { var num = Random().nextInt(2000); AppUtil.setNotification(num); return num; }
// Configure message handling when app is opened from terminated state FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async { dev.log('App opened from terminated state with message'); await handleNotification(message); });
Logger().i('CallKit Event: ${event?.event}, Body: ${event?.body}'); final data = event?.body; if (data == null) return;
switch (event?.event) { case Event.actionCallAccept: if (AppUtil.activeCallUser) { Logger().d('Call already active, ignoring accept action'); return; } AppUtil.activeCallUser = true;
if (navigatorKey.currentState == null) { await Future.delayed(const Duration(seconds: 2)); }
// Navigate to CallPage and remove all previous routes await navigatorKey.currentState?.pushAndRemoveUntil( MaterialPageRoute( builder: (context) => CallPage( userName: data['nameCaller'], callId: data['extra']?['callId'], recieverId: data['extra']?['userId'] ?? '', accep: true, ), ), (route) => false, // Remove all previous routes ); break;
case Event.actionCallDecline: await AppUtil.endCallAsync(callId: data['extra']?['callId']); await FlutterCallkitIncoming.endAllCalls(); break;
case Event.actionCallEnded: if (AppUtil.activeCallUser) { await AppUtil.endCallAsync(callId: data['extra']?['callId']); await FlutterCallkitIncoming.endAllCalls(); AppUtil.activeCallUser = false; } break;
case Event.actionCallIncoming: AppUtil.activeCallUser = false; break;
default: break; } }); } catch (e, stackTrace) { Logger().e("Error in call listener", error: e, stackTrace: stackTrace); } }
// ignore: must_be_immutable class MyApp extends StatefulWidget { final Widget? page; const MyApp({super.key, this.page});
@override State createState() => _MyAppState(); }
class _MyAppState extends State { @override void initState() { super.initState(); // Remove _listenerCallKit call since we already initialized it in main() // _listenerCallKit();
Ich versuche, zuverlässige voIP Push -Benachrichtigungen in meiner iOS -App zu implementieren, damit immer eingehende Anrufe empfangen werden, auch wenn die App im Hintergrund oder beendet ist. Das...
Ich implementieren Push-Benachrichtigungen mit einem Bild in meiner iOS-App mithilfe von Firebase Cloud Messaging (FCM). Ich habe eine benutzerdefinierte NotificationServiceExtension erstellt, um das...
Ich integriere derzeit Push -Benachrichtigungen in die Maui -App. Anstatt Azure Benachrichtigungs -Hub zu verwenden, besteht eine geschäftliche Anforderung, Dynamics 365 Customer Insights zu...
Wir haben eine App für Kurznachrichten mit über 1L aktiven Nutzern in fünf Sprachen entwickelt. Benutzer erhalten Push-Benachrichtigungen basierend auf ihrer ausgewählten Sprache, ihrem Bundesland...