アプリがfirebase_messagingを使用したプッシュ通知で終了したときにカスタムデータを受信するにはどうすればよいですか?


8

タイトルのように、アプリが終了したときにユーザーが通知をクリックしたときにカスタムデータを受信するための現在の回避策は何ですか?

Android ではonLaunchでデータメッセージを受信できないようです(これは理想的な方法です)。IOSでは、最初にこの問題に直面しているため、まだ試していません。

どんな手掛かり?

追加情報:を介して送信してfirebase cloud functionいる通知は、次の形式です。

  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

https://firebase.google.com/docs/cloud-messaging/concept-options

上でonResume私がアクションを実行することができるよ、しかし、onLaunch呼び出されることはないようです。


カスタムJSONペイロードを使用してみてください。
チャンピオンランナー

回答:


2

これは、ペイロードがデータを含めて取る形式です。これは私のプロジェクトで機能させるための方法です。さらに、すべてを正しく機能させるために、一般的なプロジェクトのセットアップに役立つ可能性のある答えがここにあります。

 {
      notification: {
        title: 'A title',
        body: 'The body.'
      },
      data: {
        // your data here
      },
      android: {
        ttl: 3600 * 1000,
        notification: {
          click_action: 'FLUTTER_NOTIFICATION_CLICK'
        }
      },
      // The below is for iOS specific properties
      // apns: {
      //   payload: {
      //     aps: {
      //       badge: 42
      //     }
      //   }
      // },
      tokens: [] // or a single 'token'
    }

androidキーは何をすることになっていますか?
Stefano Saitta

1つのプラットフォームにのみ関連する特定のプロパティがあります。androidはandroid通知専用で、apnsはiOS専用です。
DF_

2

私は、すでにLaunchでデータを取得しているので、少し待つ必要があると思います。同じものに出くわしたので書いた。

これを試して頂けますか

firebaseMessaging.configure(
  onMessage: (Map<String, dynamic> message) async { .. },
  onResume: (Map<String, dynamic> message) async { .. },
  onLaunch: (Map<String, dynamic> message) async {
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Timer(const Duration(seconds: 7), () {
        // your process...
      });
    });
  },
);

私の状況でも、そのように使用して解決しました。

onLaunch: (Map<String, dynamic> message) async {
    WidgetsBinding.instance.addPostFrameCallback((ignored) {
      Timer.periodic(const Duration(seconds: 1), (timer) {
        if (CurrentUser.currentUser != null) {
          timer.cancel(); // important **
          // redirect process with post details inside data
          if (message['data']['type'] == NotifTypes.NEW_POST)
            goGroupAndPost(Map.from(message['data'])); 
        }
      });
    });
  },

0

アクティビティがフォアグラウンドにあるかどうか(そして異なる反応をするかどうか)を伝えるのは少し難しいかもしれません。私のお気に入りの方法はBroadcastReceiver、アクティビティにローカルを登録してsendBroadcastから、サービスから実行することです。あなたは取得します真のあなたの受信機が稼働している場合、アプリケーションがフォアグラウンドである意味(そのメソッドから、そしてそう。

この例を見ることができます(GCMを使用しますが、ロジックはFCMでも同じです)ソース

また、これはMyFirebaseMessagingServiceの良い例です


0

プロバイダーでは、次の追加構成を行うことができます。デバッグで正しく行われた場合は、トークンを視覚化する必要があります。

class PushNotificationProvider{
    FirebaseMessaging _firebaseMessaging = FirebaseMessaging();

    initNotification(){
      _firebaseMessaging.requestNotificationPermission();
      _firebaseMessaging.getToken().then((token)){
        print('===== FCM Token ======');
        print(token);
      }
    }

    _firebaseMessaging.configure{
      onMessage(info){
         print('===== On Message =====');
         print(info);
       },
     onLaunch(info){
         print('===== On Launch =====');
         print(info);
       },
     onResume(info){
         print('===== On Resume =====');
         print(info);
       },

    }
}

このパッケージを使用:https : //pub.dev/packages/firebase_messaging in your project and in your firebase、in Cloud Messaging-> Options-> Personal Data-> key(click_action)-> value(FLUTTER_NOTIFICATION_CLICK)あなたが追加する必要があるFLUTTER_NOTIFICATION_CLICK。

これで、Firebaseのプッシュ通知を既に試すことができます。


これは私がすでに持っているものonLaunchですがdata、それに通知を送信すると機能しないようです
Stefano Saitta
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.