首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FCM -在Dart中无法处理背景消息,因为没有注册onBackgroundMessage处理程序。

FCM -在Dart中无法处理背景消息,因为没有注册onBackgroundMessage处理程序。
EN

Stack Overflow用户
提问于 2022-02-04 15:59:39
回答 2查看 1.6K关注 0票数 1

我完全按照文档中提到的那样做了,这是main()之外的一个未来方法,其中的onBackgroundMessage

代码语言:javascript
运行
复制
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async{
  print("Handling a background message: ${message.messageId}");
}

main() async {
  FirebaseMessaging.onBackgroundMessage((message){
    return _firebaseMessagingBackgroundHandler(message);
  });
}

但是当我运行这个应用程序时,我会发现错误:

代码语言:javascript
运行
复制
Unhandled Exception: Null check operator used on a null value
E/flutter (10760): #0      MethodChannelFirebaseMessaging.registerBackgroundMessageHandler (package:firebase_messaging_platform_interface/src/method_channel/method_channel_messaging.dart:180:53)
E/flutter (10760): #1      FirebaseMessagingPlatform.onBackgroundMessage= (package:firebase_messaging_platform_interface/src/platform_interface/platform_interface_messaging.dart:102:16)
E/flutter (10760): #2      FirebaseMessaging.onBackgroundMessage (package:firebase_messaging/src/messaging.dart:73:31)
E/flutter (10760): #3      main (package:neox/main.dart:56:21)
E/flutter (10760): #4      main (file:///E:/Flutter_Projects/NeoX/.dart_tool/flutter_build/generated_main.dart:102:42)
E/flutter (10760): #5      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:128:38)
E/flutter (10760): #6      _rootRun (dart:async/zone.dart:1426:13)
E/flutter (10760): #7      _CustomZone.run (dart:async/zone.dart:1328:19)
E/flutter (10760): #8      _runZoned (dart:async/zone.dart:1861:10)
E/flutter (10760): #9      runZonedGuarded (dart:async/zone.dart:1849:12)
E/flutter (10760): #10     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:126:5)
E/flutter (10760): #11     _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
E/flutter (10760): #12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

当我收到通知时:

代码语言:javascript
运行
复制
W/FLTFireMsgService(10760): A background message could not be handled in Dart as no onBackgroundMessage handler has been registered.
EN

回答 2

Stack Overflow用户

发布于 2022-02-04 18:48:52

这是你需要的所有步骤

代码语言:javascript
运行
复制
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {

  // you need to initialize firebase first
  await Firebase.initializeApp();

  print("Handling a background message: ${message.messageId}");
}

main() async {
  WidgetsFlutterBinding.ensureInitialized();
   
  // initialize firebase
  await Firebase.initializeApp();

  // you can just pass the function like this
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

   await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
    alert: true,
    badge: true,
    sound: true,
  );
}
票数 0
EN

Stack Overflow用户

发布于 2022-04-07 12:47:40

我想你是误读了文档

下面是在您的main.dart中应该如何使用

代码语言:javascript
运行
复制
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  // If you're going to use other Firebase services in the background, such as Firestore,
  // make sure you call `initializeApp` before using other Firebase services.
  await Firebase.initializeApp();

  print("Handling a background message: ${message.messageId}");
}

void main() {
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
  runApp(MyApp());
}

并记住配置您的AndroidManifest.xml

代码语言:javascript
运行
复制
<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

当您面临此错误时:java.lang.RuntimeException:无法创建服务rw.aos.im.java.MyFirebaseMessagingService: java.lang.ClassNotFoundException:java.lang.RuntimeException

请使用以下方法

代码语言:javascript
运行
复制
<service
    android:name="com.google.firebase.messaging.FirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

确保正确配置了下列所有设置

  1. https://firebase.google.com/docs/cloud-messaging/android/client
  2. https://firebase.google.com/docs/android/setup

希望这能解决你的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70989307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档