我在Android最新版的GCM中遇到了两个问题。根据GCM的规定,如果负载包含“notification”属性,则它将自动在托盘中显示通知。但是他们没有说明如何处理该通知的点击事件。如果负载只包含数据属性,则会调用GCMListenerService的“onMessageReceived”方法。但是如果负载同时包含通知和数据属性,则该方法不会被调用。有什么想法如何解决?我还需要检查iOS的运行情况。
我在Android最新版的GCM中遇到了两个问题。根据GCM的规定,如果负载包含“notification”属性,则它将自动在托盘中显示通知。但是他们没有说明如何处理该通知的点击事件。如果负载只包含数据属性,则会调用GCMListenerService的“onMessageReceived”方法。但是如果负载同时包含通知和数据属性,则该方法不会被调用。有什么想法如何解决?我还需要检查iOS的运行情况。
你需要在通知负载中设置一个点击操作(click_action)。当用户打开/点击通知时,将启动使用该操作声明的应用程序中的Activity。
例如,设置click_action: OPEN_ACTIVITY_1,并将以下意图过滤器(intent filter)添加到所需的Activity中:
<intent-filter>
<action android:name="OPEN_ACTIVITY_1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
然后,您可以使用getIntent()方法并查看意图附加信息,从Activity中提取消息中的数据。
请参阅此处的条目:https://developers.google.com/cloud-messaging/server-ref#notification-payload-support
如果您使用notification
参数发送推送,则无法通过onMessageReceived
进行处理。
如果您想要处理通知,请使用data
选项发送推送,现在您可以使用GCM和onMessageReceived
进行处理。
注意:iOS使用notifications
键处理通知。
对于iOS,请使用notification
键发送推送,对于Android,请使用data
键。
对于Android:
{"data":{"message":"嘿"}},registration_ids":["设备令牌"]
对于iOS:
{"notification":{"title":"嘿标题", "body":"嘿正文"},"to":"设备令牌"}