【问题标题】:Firebase Messaging in Flutter [duplicate]Flutter中的Firebase消息传递[重复]
【发布时间】: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


    【解决方案1】:

    我注意到之前有人问过这个错误并解决了这个问题。链接在这里; Generate Flutter Local Notification when background FCM Triggers

    【讨论】:

      猜你喜欢
      • 2021-08-21
      • 2018-09-07
      • 2021-09-04
      • 2021-02-19
      • 2020-05-10
      • 2020-03-15
      • 2023-03-23
      • 2021-06-12
      • 2016-12-25
      相关资源
      最近更新 更多