簡體   English   中英

onMessage 回調 function 未觸發

[英]onMessage callback function is not triggering

這是我的代碼:

initializeApp() async {
  FirebaseMessaging firebaseMessaging = FirebaseMessaging();
  firebaseMessaging.configure(
    onMessage: (Map<String, dynamic> message) async {
      print("----->onMessage: $message");
    },
    onLaunch: (Map<String, dynamic> message) async {
      print("----->onLaunch: $message");
    },
    onResume: (Map<String, dynamic> message) async {
      print("----->onResume: $message");
    },
  );
  firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true));

}

這是日志:

E/FlutterFcmService( 1588): Fatal: failed to find callback
I/flutter ( 1588): onMessage: {notification: {title: this is a test, body: test}, data: {click_action: FLUTTER_NOTIFICATION_ACTION}}

這個問題也在這里問,但沒有回應。

所以這是腳本:我有 2 個應用程序:在這兩個應用程序上,我都測試了有狀態小部件是活動屏幕:

import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';

class FCMTestPage extends StatefulWidget {
  static String name = '/test-fcm';

  @override
  _FCMTestPageState createState() => _FCMTestPageState();
}

class _FCMTestPageState extends State<FCMTestPage> {
  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  final List<Message> messages = [];

  String token;

  @override
  void initState() {
    super.initState();


    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        final notification = message['notification'];
        setState(() {
          messages.add(Message(
              title: notification['title'], body: notification['body']));
        });
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");

        final notification = message['data'];
        setState(() {
          messages.add(Message(
            title: '${notification['title']}',
            body: '${notification['body']}',
          ));
        });
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
      },
    );
    _firebaseMessaging.requestNotificationPermissions(
        const IosNotificationSettings(sound: true, badge: true, alert: true));
  }

  @override
  Widget build(BuildContext context) {
    // getToken();
    return Scaffold(
      body: ListView(
        children: messages.map(buildMessage).toList(),
      ),
    );
  }

  Widget buildMessage(Message message) => ListTile(
    title: Text(message.title),
    subtitle: Text(message.body),
  );

  getToken() async {
     token = await _firebaseMessaging.getToken();
     print('********************************************');
     print(token);
     print('********************************************');
  }

}


@immutable
class Message {
  final String title;
  final String body;

  const Message({
    @required this.title,
    @required this.body,
  });
}

這些對這兩個應用程序都適用。 然后我開始將我的代碼從測試遷移到真正的邏輯。 我有initializeApp()方法:

initializeApp() async {
  FirebaseMessaging firebaseMessaging = FirebaseMessaging();
  firebaseMessaging.configure(

    onMessage: (Map<String, dynamic> message) async {
      print("onMessage: $message");
    },

    onLaunch: (Map<String, dynamic> message) async {
      print("onLaunch: $message");
    },

    onResume: (Map<String, dynamic> message) async {
      print("onResume: $message");
    },

  );

  firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true));

}

*刪除了一些不相關的行。

有趣的是相同的代碼適用於一個應用程序,不適用於另一個應用程序。 相同的代碼在有狀態小部件中工作,而不在頂級函數中工作(我試圖包裝在 class 中,使 function static,雖然在同一個應用程序中沒有幫助)。

我是如何解決的:

然后我需要快速解決問題並決定將我的一個屏幕轉換為有狀態並將邏輯遷移到此屏幕。 也許它與垃圾收集有關。

將此代碼添加到您的 AndroidManifest.xml

<intent-filter>
 <action android:name="FLUTTER_NOTIFICATION_CLICK"/>
 <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM