如何在用户点击FCM通知后访问后台应用中的数据有效负载?

时间:2017-12-25 12:15:40

标签: android firebase push-notification firebase-cloud-messaging

我通过将以下JSON内容发布到网址https://fcm.googleapis.com/fcm/send 后台的Android应用发送带有数据有效负载的FCM通知消息 p>

{
    "notification":{"body":"Alexander performs a move!"},
    "data":{"gid":1},
    "to":"c0k6VWNdTSo:APA91bETXBGasi-X6-VGWTWYtSv3u1NETwqblEW1uoE1MswFkb9-Yf-rlVEGbaPD4gLQh3JLWIAyQRvAYNcdtmZLgFDhUEnXwFpVQSNFFr0xl47sK9FnvRY9J6JLX2P34UvpuCbZYBZ4"
}

并收到有关FCM后端成功交付的确认信息:

{
    "multicast_id":7103158248293730650,
    "success":1,
    "failure":0,
    "canonical_ids":0,
    "results":[{"message_id":"0:1514203203800219%c7d12ab4c7d12ab4"}]
}

之后,我点按Android手机顶部的通知,我的应用程序正在启动(之前是后台):

debugger screenshot

然后我试图访问" gid"我在"数据"中设置的值onCreate方法中代码的部分通知:

    Intent i = getIntent();
    int gid = i.getIntExtra("gid", 0);
    if (gid > 0) {
        // TODO show GameFragment
    }

不幸的是,没有这样的EXTRA(你也可以在上面的调试器截图中看到,由于某些原因没有附加了意图)。

我在这里想念的是什么?根据{{​​3}}(强调我的):

  

在后台,应用会收到通知有效负载   通知托盘,并且只有在用户点击时处理数据有效负载   在通知上。

如何访问"数据"点击通知后的部分,是不是作为意图额外传递了?

2 个答案:

答案 0 :(得分:0)

通知部分完全由谷歌处理。并且没有任何通知点击。默认通知点击启动器活动将被打开并且完全由google管理。所以你必须通过检查来管理启动器活动数据部分。

  

数据部分处理

由于数据部分完全依赖于你,你是如何从服务器

发送的
if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        }

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }

答案 1 :(得分:0)

您需要将Intent Filter设置为manifest.xml文件。

步骤:1

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

第2步:

“ click_action”:“。HomeActivity”到您的通知数据

“通知”:{ “ click_action”:“。HomeActivity”         “ body”:“很酷的优惠。到期前先获取!”,         “ title”:“平价80%的折扣”,         “ icon”:“ appicon”,         “ click_action”:“活动名称” //如果需要的话是可选的.....     }

以下是有关Firebase消息的更清晰的概念。我从他们的支持团队那里找到了。

Firebase具有三种消息类型:

通知消息:通知消息可在后台或前台工作。当应用程序在后台运行时,通知消息将传递到系统托盘。如果应用程序在前台,则消息由onMessageReceived()或didReceiveRemoteNotification回调处理。这些本质上就是所谓的显示消息。

数据消息:在Android平台上,数据消息可以在后台和前台运行。数据消息将由onMessageReceived()处理。这里有一个特定于平台的注释:在Android上,可以在用于启动活动的Intent中检索数据有效负载。详细地说,如果您具有“ click_action”:“ launch_Activity_1”,则可以仅从Activity_1通过getIntent()检索此意图。

同时具有通知和数据有效负载的消息:在后台时,应用程序会在通知托盘中接收通知有效负载,并且仅在用户点击通知时处理数据有效负载。在前台时,您的应用程序会收到一个同时具有两个有效负载的消息对象。其次,click_action参数通常用于通知有效负载中,而不用于数据有效负载中。如果在数据有效载荷内部使用,则此参数将被视为自定义键值对,因此您需要实现自定义逻辑以使其按预期工作。

此外,我建议您使用onMessageReceived方法(请参阅数据消息)提取数据束。根据您的逻辑,我检查了bundle对象,但未找到预期的数据内容。这是对类似情况的参考,可能会更加清楚。

有关更多信息,请访问我的这个线程