【发布时间】:2017-05-22 22:56:57
【问题描述】:
在我的应用程序中有不同的类别,主页(MainActivity)、cmets 活动和聊天活动等。 当我收到来自 cmets、Chat 或主页的通知时,它仍会打开主要活动。我想要的是,如果我收到关于聊天的通知,它应该打开聊天活动,如果关于 cmets,它应该打开 cmets 活动等等...... 请帮忙谢谢。
【问题讨论】:
标签: android firebase push-notification
在我的应用程序中有不同的类别,主页(MainActivity)、cmets 活动和聊天活动等。 当我收到来自 cmets、Chat 或主页的通知时,它仍会打开主要活动。我想要的是,如果我收到关于聊天的通知,它应该打开聊天活动,如果关于 cmets,它应该打开 cmets 活动等等...... 请帮忙谢谢。
【问题讨论】:
标签: android firebase push-notification
在您的message notification data 中,添加属性click_action 和操作字符串的值。对于您要启动的活动,请更新您的清单以定义与该操作匹配的意图过滤器。
例如,带有消息:
{
"to": "dhVgCGVkTSR:APA91b...mWsm3t3tl814l",
"notification": {
"title": "New FCM Message",
"body": "Hello World!",
"click_action": "com.example.FCM_NOTIFICATION"
},
"data": {
"score": "123"
}
}
像这样定义意图过滤器:
<activity android:name=".MyFcmNotificationActivity">
<intent-filter>
<action android:name="com.example.FCM_NOTIFICATION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
【讨论】:
您的问题的答案是PendingIntent。您需要在 FCM 有效负载中发送通知类型(聊天、cmets 等),然后在您的 onMessageReceived() 中处理通知、了解类型并使用所需的活动创建 PendingIntent。当用户点击通知时,android 会启动 PendingIntent 中指定的活动。请参阅此android documentation。我希望这会有所帮助。
[更新] 我更喜欢Bob's answer,但我自己从未尝试过
【讨论】:
在您的 MainActivity onCreate() 中,您需要获取启动 Activity 的意图并从通知中检索数据。
Bundle bundle = getIntent().getExtras();
if (bundle != null && bundle.get("data")!=null) {
//here can get notification message
String datas = bundle.get("data").toString();
}
您可以在此处根据您从通知中收到的数据重定向用户。 https://firebase.google.com/docs/cloud-messaging/android/receive#backgrounded
在后台应用中处理通知消息
当您的应用处于后台时,Android 会发送通知 消息到系统托盘。用户点击通知会打开 默认应用启动器。
这包括同时包含通知和数据负载的消息 (以及从通知控制台发送的所有消息)。在这些 在这种情况下,通知会发送到设备的系统托盘,并且 数据有效负载是在您的意图的附加内容中交付的 启动器活动。
【讨论】: