如果 GCM 自动显示,如何在 Android 中处理点击通知

Posted

技术标签:

【中文标题】如果 GCM 自动显示,如何在 Android 中处理点击通知【英文标题】:How to handle tap of notification in Android if displayed automatically by GCM 【发布时间】:2015-06-11 15:50:32 【问题描述】:

我在 GCM 的最新更新中遇到了 2 个 android 问题。根据 GCM,如果有效负载包含“通知”属性,它将自动在托盘中显示通知。但是他们没有提到如何处理该通知的点击事件。如果负载仅包含数据属性,则调用 GCMListenerService 的“onMessageReceived”。但如果有效负载同时包含通知和数据属性,则不会调用该方法。知道如何解决吗?我还必须检查 ios,看看它在那里的表现如何。

【问题讨论】:

您尝试使用 Parse.com 吗?对于 Android 和 iOS 来说,这非常简单。但我认为你只想使用 GCM... 【参考方案1】:

您需要在通知负载中设置 click_action。然后,当用户打开/单击通知时,将启动您应用中使用该操作声明的 Activity。

例如设置 click_action: OPEN_ACTIVITY_1,并将以下意图过滤器添加到所需的 Activity:

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

然后你可以从 Activity 中的消息中提取数据,通过使用 getIntent() 然后查看 Intent extras。

在此处查看条目:https://developers.google.com/cloud-messaging/server-ref#notification-payload-support

【讨论】:

您认为,GcmListenerService 不再有用,因为它甚至在有效负载中存在通知属性时都不会被调用? 无法发送一条显示通知的消息并调用 GcmListenerService。您可以通过发送两条消息来获得相同的效果,一条带有通知负载,另一条带有数据负载。 你不需要指定一个意图去你把意图过滤器放在里面的活动吗?我将该意图过滤器放在我的一个视图中,当我单击 json 对象的通知键中具有“click_action”:“OPEN_ACTIVITY_1”的通知时,什么也没有发生。我是 Android 开发新手,所以任何建议都会有所帮助。 @WinsterJose,GcmListenerService 仍然有用,因为 gcm 仅在您的应用处于非活动状态时处理通知的显示。否则,仍然会调用 onMessageReceived(),它应该处理通知的显示。 只这样做对我没有用。我需要添加these codes 来启动指定的活动,最后它工作了【参考方案2】:

如果您使用notification 参数发送推送,那么您无法处理onMessageReceived

如果您想处理通知,请使用data 选项发送推送,现在您可以使用 GCM 和onMessageReceived 处理。

注意:ios 使用notifications 键处理通知。

使用notification 键为ios 发送推送,为android 发送data 键。

对于安卓;

"data":"message":"hey",registration_ids":["device token"]

对于 iOS:

"notification":"title":"Hey title", "body":" Hey body","to":"device token"

【讨论】:

registration_ids 将消息传送到一个或多个设备(因为它是一个数组)。如何将它发送到安装了应用程序的每台设备(实际上没有列出所有 id)? (在 IOS 和 Android 中)

以上是关于如果 GCM 自动显示,如何在 Android 中处理点击通知的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GCM 在 android 设备上分别显示每个推送通知

如何在锁定屏幕上显示 gcm 推送通知?

如何在phonegap上使用GCM处理android中的多个推送通知

如何在 Android + GCM 中获得带有声音 + 自定义应用程序图标的推送通知

在 Android Studio 中使用 GCM

Android-GCM:如何照顾注销的用户?