首页 文章

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

提问于
浏览
1

我想我理解GCM的新notification_key功能背后的理由是“只是将消息发送到 useronly make them read it once ” . 我从文档的这一部分推断出来:

通过用户通知,第三方应用服务器可以将单个消息发送到在单个用户拥有的设备上运行的应用的多个实例 . 此功能称为用户通知 . 用户通知使用户拥有的每个应用实例都可以反映最新的消息传递状态 . 例如:如果在一台设备上处理了一条消息,则其他设备上的GCM消息将被解除 . 例如,如果用户在一台设备上处理了日历通知,则该通知将在用户的其他设备上消失 . 如果消息尚未传送到设备但已经处理完毕,则GCM服务器会将其从其他设备的未发送队列中删除 . 同样,设备可以向notification_key发送消息,该消息是GCM用于向其注册ID与密钥相关联的所有设备扇出通知的令牌 .

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

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

1 回答

  • 1

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

    这是您应该用于所有创建/添加/删除操作的HTTP请求标头:content-type:“application / json”
    Headers :“project_id”:<projectID>
    Headers :“授权”,“密钥= API_KEY”

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

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

    restricted_package_name包含应用程序包名称的字符串 . 设置后,消息将仅发送到与包名称匹配的注册ID . 可选的 .

相关问题