【发布时间】:2021-07-21 05:45:45
【问题描述】:
我正在尝试在 Flutter 应用中使用 Firebase 消息传递。在某个地方我错过了一些东西,所以我面临着错误...... 我的 notification_handler 代码;
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
Future<void> myBackgroundMessageHandler(Map<String, dynamic> message) {
if (message.containsKey('data')) {
// Handle data message
NotificationHandler.showNotification(message);
}
return Future<void>.value();
}
class NotificationHandler {
FirebaseMessaging _fcm = FirebaseMessaging();
static final NotificationHandler _singleton = NotificationHandler._internal();
factory NotificationHandler() {
return _singleton;
}
NotificationHandler._internal();
BuildContext myContext;
initializeFCMNotification(BuildContext context) async {
myContext = context;
var initializationSettingsAndroid = AndroidInitializationSettings('app_icon');
var initializationSettingsIOS = IOSInitializationSettings(onDidReceiveLocalNotification: onDidReceiveLocalNotification);
var initializationSettings = InitializationSettings(android: initializationSettingsAndroid, iOS: initializationSettingsIOS);
flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: onSelectNotification);
_fcm.onTokenRefresh.listen((newToken) async {
User _currentUser = FirebaseAuth.instance.currentUser;
await FirebaseFirestore.instance.doc("tokens/" + _currentUser.uid).set({"token": newToken});
});
_fcm.configure(
onMessage: (Map<String, dynamic> message) async {
//print("onMessage tetiklendi: $message");
showNotification(message);
},
onBackgroundMessage: myBackgroundMessageHandler,
onLaunch: (Map<String, dynamic> message) async {
//print("onLaunch tetiklendi: $message");
},
onResume: (Map<String, dynamic> message) async {
// print("onResume tetiklendi: $message");
},
);
}
static void showNotification(Map<String, dynamic> message) async {
var mesaj = Person(
name: message["data"]["title"],
key: '1',
//icon: userURLPath,
icon: DrawableResourceAndroidIcon('daisy'),
);
var mesajStyle = MessagingStyleInformation(mesaj, messages: [Message(message["data"]["message"], DateTime.now(), mesaj)]);
var androidPlatformChannelSpecifics = AndroidNotificationDetails('1234', 'Yeni Mesaj', 'your channel description',
styleInformation: mesajStyle, importance: Importance.max, priority: Priority.high, ticker: 'ticker');
var iOSPlatformChannelSpecifics = IOSNotificationDetails();
var platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics, iOS: iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.showDailyAtTime(
1,
message["data"]["title"],
"Dont Forget to Set Your Weight in Today**",
Time(20,44,0),
platformChannelSpecifics,
);
print("handler succesful");
}
Future onSelectNotification(String payload) async {
final _userModel = Provider.of<UserModel>(myContext);
if (payload != null) {
// debugPrint('notification payload: ' + payload);
Map<String, dynamic> gelenBildirim = await jsonDecode(payload);
}
}
Future onDidReceiveLocalNotification(int id, String title, String body, String payload) {}
}
我收到的不是通知,而是以下错误并且应用程序关闭。
PID:21082 E/AndroidRuntime(21082): java.lang.RuntimeException: 无法启动接收器 com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver: java.lang.NullPointerException: 尝试调用虚拟方法'int java.lang.Integer.intValue()'空对象引用 E/AndroidRuntime(21082):在 android.app.ActivityThread.handleReceiver(ActivityThread.java:3259) E/AndroidRuntime(21082):在 android.app.ActivityThread.-wrap17(未知来源:0) E/AndroidRuntime(21082): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677) E/AndroidRuntime(21082):在 android.os.Handler.dispatchMessage(Handler.java:105) E/AndroidRuntime(21082): 在 android.os.Looper.loop(Looper.java:164) E/AndroidRuntime(21082): 在 android.app.ActivityThread.main(ActivityThread.java:6541) E/AndroidRuntime(21082): 在 java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(21082):在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) E/AndroidRuntime(21082):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) E/AndroidRuntime(21082):原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int java.lang.Integer.intValue()” E/AndroidRuntime(21082):在 com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin.setSmallIcon(FlutterLocalNotificationsPlugin.java:237) E/AndroidRuntime(21082): 在 com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin.createNotification(FlutterLocalNotificationsPlugin.java:179) E/AndroidRuntime(21082):在 com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin.showNotification(FlutterLocalNotificationsPlugin.java:791) E/AndroidRuntime(21082):在 com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver.onReceive(ScheduledNotificationReceiver.java:46) E/AndroidRuntime(21082):在 android.app.ActivityThread.handleReceiver(ActivityThread.java:3252) E/AndroidRuntime(21082): ... 8 更多 F/crash_dump64(25605): crash_dump.cpp:235] 目标在我们附加之前就死掉了(收到的主要 tid = 25603) 与设备的连接断开。
【问题讨论】:
标签: firebase flutter dart notifications firebase-cloud-messaging