当应用程序在flutter应用程序中终止时显示来电通知

问题描述 投票:0回答:1

我正在使用 Agora 在我的应用程序中实现视频通话,并使用这个 flutter_callkit_incoming 向用户显示来电。

我的流程是:当有电话打来时,它会收到来自 FCM 的通知,并显示 Flutter 来电呼叫套件通知。当应用程序位于前台和后台时(未从应用程序切换器终止),流程绝对正常。

当应用程序终止时,FCM 会发送呼叫通知,但无法触发呼叫套件发起来电。我需要在应用程序终止时触发呼叫套件。

有什么办法可以做到吗?

有人遇到过类似问题并解决了吗?

这里是FCM后台Handler 当应用程序在后台但未终止时,这绝对可以正常工作,但当应用程序终止时,它无法触发 CallKit。

@pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
    await Firebase.initializeApp();
  

  String docName = '';
  String docImage = '';
  String uuid = '';

  dev.log('Message !also contained a notification: ${message.notification}');

  if (message.data['type'] == 'call') {
    PermissionRequestHandler.requestCameraAndMicPermissionsForCalling();
    docName = message.data['doc_name'];
    docImage = message.data['doc_image'];
    uuid = message.data['uuid'];

    logger.d('docName: $docName');
    logger.d('docImage: $docImage');

    showCallkitIncoming(docName, docImage, uuid);
  } 
 }

触发callkit的函数

Future<void> showCallkitIncoming(
    String docName, String docImage, String uuid) async {
    final params = CallKitParams(
        id: uuid,
        nameCaller: docName,
        appName: 'AppName',
        avatar: docImage,
        type: 0,
        textAccept: 'Accept',
        textDecline: 'Decline',
        duration: 30000,
        missedCallNotification: const NotificationParams(isShowCallback: false),
        android: const AndroidParams(
          backgroundColor: '#2E2727',
          isCustomNotification: true,
          isShowLogo: false,
          isShowFullLockedScreen: true,
          ringtonePath: 'system_ringtone_default',
        ),
        ios: const IOSParams(
          iconName: 'Getfit',
          supportsVideo: false,
          audioSessionMode: 'default',
          audioSessionActive: true,
          audioSessionPreferredSampleRate: 44100.0,
          audioSessionPreferredIOBufferDuration: 0.005,
          supportsDTMF: true,
          supportsHolding: false,
          supportsGrouping: false,
          supportsUngrouping: false,
          ringtonePath: 'system_ringtone_default',
        ));

    await FlutterCallkitIncoming.showCallkitIncoming(params);
}

这是应用程序终止且 FCM 收到呼叫通知时的错误日志。它没有触发 callkit 来电通知,而是记录了这个

I/flutter (21552): FlutterFire Messaging: An error occurred in your background messaging handler:
I/flutter (21552): PlatformException(java.lang.Exception: Failed to load FirebaseOptions from resource. Check that you have defined values.xml correctly., Exception, Cause: null, Stacktrace: java.lang.Exception: Failed to load FirebaseOptions from resource. Check that you have defined values.xml correctly.
I/flutter (21552):      at io.flutter.plugins.firebase.core.i.v(Unknown Source:12)
I/flutter (21552):      at io.flutter.plugins.firebase.core.i.l(Unknown Source:0)
I/flutter (21552):      at io.flutter.plugins.firebase.core.b.run(Unknown Source:4)
I/flutter (21552):      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
I/flutter (21552):      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
I/flutter (21552):      at java.lang.Thread.run(Thread.java:1012)
I/flutter (21552): , null)
flutter dart firebase-cloud-messaging callkit
1个回答
0
投票

您正在像这样初始化 Firebase:

await Firebase.initializeApp();

如果您按照有关 将 Firebase 添加到您的应用程序的文档进行操作,它实际上看起来像这样:

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

这两种初始化 Firebase 的方法都是有效的,但后一种代码从

firebase_options.dart
文件夹中的
lib
文件中读取值,而前者从
google_services.json
文件中读取值。因此,您必须确保
google_services.json
文件是最新的
,可以从 Firebase 控制台下载该文件并将其放在正确的位置,或者通过 (重新)运行
flutterfire configure

© www.soinside.com 2019 - 2024. All rights reserved.