GCM,用户通知,同一设备上的两个GCM感知应用程序,当使用通知密钥发送GCM消息时会触发哪一个?

时间:2014-02-26 15:05:46

标签: android push-notification google-cloud-messaging

我认为我理解GCM新的notification_key功能背后的理由是“只是将信息发送给用户只让他们读取一次”。我从文档的这一部分推断出它:

  

通过用户通知,第三方应用服务器可以发送一个   消息到在a拥有的设备上运行的应用程序的多个实例   单个用户。此功能称为用户通知。用户   通知使用户拥有的每个应用实例都成为可能   反映最新的消息状态。例如:

     

如果在一台设备上处理了某条消息,则其他设备上的GCM消息将被解除。例如,如果用户已经处理过   在一台设备上发送日历通知,通知将会消失   用户的其他设备。

     

如果消息尚未传送到设备但已经处理完毕,则GCM服务器会将其从未发送的队列中删除   其他设备。

     

同样,设备可以向notification_key发送消息,该消息是GCM用于向所有人扇出通知的令牌   注册ID与密钥相关联的设备。

直到最近,我才有两个我写在手机上的GCM应用程序。一个人使用了旧的弃用方法来实现GCM,另一个使用了新的API。当然他们有不同的注册ID。

如果我恢复旧应用程序并请求通知密钥并在请求中发送这两个不同的注册表,那么当我使用通知密钥发送GCM时,将触发哪个应用程序的IntentService?

1 个答案:

答案 0 :(得分:1)

如果您为每个应用使用不同的Google API项目ID和API密钥,则您只能在通知密钥中添加其中一个应用的注册ID,因为您在所有应用中都指定了项目ID和API密钥用户通知相关请求:

  

以下是您应该用于所有创建/添加/删除操作的HTTP请求标头:

content-type: "application/json"
Header : "project_id": <projectID>
Header: "Authorization", "key=API_KEY"

在这种情况下,只有一个应用程序会收到消息(因为其他注册ID对您的通知密钥无效)。

如果您对两个应用程序使用相同的项目ID,那么查看哪个应用程序获取消息确实很有趣。您可以在sending the message时使用restricted_package_name参数强制将消息仅传递给其中一个应用:

  

<强> restricted_pa​​ckage_name   包含应用程序包名称的字符串。设置后,消息将仅发送到与包名称匹配的注册ID。可选的。