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

6

我在Android最新版的GCM中遇到了两个问题。根据GCM的规定,如果负载包含“notification”属性,则它将自动在托盘中显示通知。但是他们没有说明如何处理该通知的点击事件。如果负载只包含数据属性,则会调用GCMListenerService的“onMessageReceived”方法。但是如果负载同时包含通知和数据属性,则该方法不会被调用。有什么想法如何解决?我还需要检查iOS的运行情况。


1
你尝试过使用Parse.com吗?对于Android和iOS来说非常简单。但我认为你只想使用GCM... - Franzé Jr.
2个回答

14

你需要在通知负载中设置一个点击操作(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


你认为,如果通知属性存在于负载中,GcmListenerService就不再有用了,因为它甚至都没有被调用过吗? - Winster
无法发送单个消息以显示通知并调用GcmListenerService。您可以通过发送两条消息来获得相同的效果,一条带有通知负载,另一条仅带有数据负载。 - morepork
你不需要指定一个意图来进入你放置了intent-filter的活动吗?我把那个intent-filter放在我的一个视图里,但是当我点击具有json对象中通知键中的"click_action": "OPEN_ACTIVITY_1"的通知时,什么也没有发生。我是Android开发新手,所以任何建议都会有所帮助。 - bxiong
@WinsterJose,GcmListenerService仍然很有用,因为gcm只在您的应用程序不活动时处理通知的显示。否则,onMessageReceived()仍会被调用,它应该处理通知的显示。 - vida
1
仅仅这样做对我来说是不起作用的。我需要添加这些代码来启动指定的活动,最终它才能正常工作。 - Hilal

0

如果您使用notification参数发送推送,则无法通过onMessageReceived进行处理。

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

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

对于iOS,请使用notification键发送推送,对于Android,请使用data键。

对于Android:

{"data":{"message":"嘿"}},registration_ids":["设备令牌"]

对于iOS:

{"notification":{"title":"嘿标题", "body":"嘿正文"},"to":"设备令牌"}


registration_ids将向一个或多个设备发送消息(因为它是一个数组)。如何将其发送到安装了应用程序的每个设备(而不实际列出所有ID)?(在iOS和Android上) - BraveNinja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接