firebase - firebase-messaging - 致命:找不到回调
问题描述
我正在尝试使用 FCM 消息传递并不断收到此错误。
E/FlutterFcmService( 3684): Fatal: failed to find callback
下面是我用来设置的代码。
static Future<void> messagePiper(
Map<String, dynamic> message,
FilteredMap<String, ChatMessage> globalChatEntryMap,
FilteredMap<String, ChatMessage> gameChatEntryMap,
Subject<List<ChatMessage>> globalChatSubject,
Subject<List<ChatMessage>> gameChatSubject,
Map<String, Player> _playerMap) async {
final Map<String, dynamic> data = message['data'];
if (data.containsKey('name')) {
final msg = ChatMessage.fromMap(data);
globalChatEntryMap.putIfAbsent(msg.id, () => msg);
globalChatSubject.add(globalChatEntryMap.values.toList());
} else {
final msg = GameChatMessage.fromMap(data);
final chat = ChatMessage.fromGlobalChatMessage(
msg,
_playerMap[msg.pId].name,
_playerMap[msg.pId].imageUrl,
);
print('chat: $chat');
gameChatEntryMap.putIfAbsent(msg.id, () => chat);
print('_gameChatEntryMap : $gameChatEntryMap');
gameChatSubject.add(gameChatEntryMap.values.toList());
}
return Future<void>.value();
}
FirebaseMessaging
是传入配置的回调。
final FirebaseMessaging _fm = FirebaseMessaging();
@override
void initState() {
_fm.configure(
onMessage: (Map<String, dynamic> message) async {
print('onMessagee : $message');
return Utils.messagePiper(
message,
_globalChatEntryMap,
_gameChatEntryMap,
_globalChatSubject,
_gameChatSubject,
_playerMap);
},
onLaunch: (Map<String, dynamic> message) async {
print('onLaunch : $message');
return Utils.messagePiper(
message,
_globalChatEntryMap,
_gameChatEntryMap,
_globalChatSubject,
_gameChatSubject,
_playerMap);
;
},
onResume: (Map<String, dynamic> message) async {
print('onResume : $message');
return Utils.messagePiper(
message,
_globalChatEntryMap,
_gameChatEntryMap,
_globalChatSubject,
_gameChatSubject,
_playerMap);
;
},
onBackgroundMessage: null);
....
Java 配置文件
package io.flutter.plugins;
import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;
public class Application extends FlutterApplication implements PluginRegistrantCallback {
@Override
public void onCreate() {
super.onCreate();
FlutterFirebaseMessagingService.setPluginRegistrant(this);
}
@Override
public void registerWith(PluginRegistry registry) {
GeneratedPluginRegistrant.registerWith(registry);
}
}
依赖版本
random_string: 0.0.2
firebase_auth: ^0.14.0+5
firebase_database: ^3.0.7
provider: 3.0.0
rxdart: ^0.22.2
collection: ^1.14.11
audioplayers: ^0.13.2
firebase_admob: ^0.5.5
connectivity: ^0.4.4
firebase_messaging: ^5.1.6 # tried with several different versions
我尝试了几个firebase_messaging
版本,但找不到修复程序。
感谢任何帮助解决此问题。
解决方案
此错误消息来自startBackgroundIsolate
用于允许处理后台消息。如果您不想处理后台消息,那么您可以放心地忽略此错误消息。否则,您需要设置回调来处理后台消息,如此处所述
如果单击通知时未执行回调,那是因为您没有click_action
将消息的属性设置为FLUTTER_NOTIFICATION_CLICK
推荐阅读
- ios - 如何向 UITableViewCells Swift 添加多个按钮
- javascript - 如何在 AngularJS 中向 app.module() 动态添加控制器?
- swift - 快速惰性序列 - 为什么在引入定义时编译器会抱怨
- wordpress - Woocommerce - 如果客户选择“运送到其他地址?”,请通知管理员
- c++ - chrono:我可以在一个小时的时间尺度上用稳定的时钟验证系统时钟吗?
- excel - VBA IE11浏览器自动化单击注销按钮不起作用
- lambda - 定义 lambda 时 [&] 是什么意思?
- arrays - 空数组与字典
- python - 获取新列之前的列中的元素
- sql - 如何不插入两个相同的值