我通过将以下JSON内容发布到网址https://fcm.googleapis.com/fcm/send 后台的Android应用发送带有数据有效负载的FCM通知消息 p>
并收到有关FCM后端成功交付的确认信息: 之后,我点按Android手机顶部的通知,我的应用程序正在启动(之前是后台): 然后我试图访问" gid"我在"数据"中设置的值 不幸的是,没有这样的EXTRA(你也可以在上面的调试器截图中看到,由于某些原因没有附加了意图)。 我在这里想念的是什么?根据{{3}}(强调我的): 在后台,应用会收到通知有效负载
通知托盘,并且只有在用户点击时处理数据有效负载
在通知上。 如何访问"数据"点击通知后的部分,是不是作为意图额外传递了?{
"notification":{"body":"Alexander performs a move!"},
"data":{"gid":1},
"to":"c0k6VWNdTSo:APA91bETXBGasi-X6-VGWTWYtSv3u1NETwqblEW1uoE1MswFkb9-Yf-rlVEGbaPD4gLQh3JLWIAyQRvAYNcdtmZLgFDhUEnXwFpVQSNFFr0xl47sK9FnvRY9J6JLX2P34UvpuCbZYBZ4"
}
{
"multicast_id":7103158248293730650,
"success":1,
"failure":0,
"canonical_ids":0,
"results":[{"message_id":"0:1514203203800219%c7d12ab4c7d12ab4"}]
}
onCreate
方法中代码的部分通知: Intent i = getIntent();
int gid = i.getIntExtra("gid", 0);
if (gid > 0) {
// TODO show GameFragment
}
答案 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对象,但未找到预期的数据内容。这是对类似情况的参考,可能会更加清楚。
有关更多信息,请访问我的这个线程