我是 GCM 的新手。我想向所有安装了该应用程序的设备发送消息。我读到了registration_id:第一次连接到GCM后,谷歌将这个唯一的字符串发送到设备。我是服务器世界的初学者,但如果我没记错的话,在服务器端,为了向设备发送通知,我必须向 google 发送registration_id 数组和消息。
谷歌怎么知道注册ID?有没有办法在不通过注册 ID 的情况下向所有设备发送消息?谢谢你。
我是 GCM 的新手。我想向所有安装了该应用程序的设备发送消息。我读到了registration_id:第一次连接到GCM后,谷歌将这个唯一的字符串发送到设备。我是服务器世界的初学者,但如果我没记错的话,在服务器端,为了向设备发送通知,我必须向 google 发送registration_id 数组和消息。
谷歌怎么知道注册ID?有没有办法在不通过注册 ID 的情况下向所有设备发送消息?谢谢你。
借助主题支持,现在可以使用 GCM 3.0 向所有设备发送通知。应用程序必须订阅一个或多个主题,并且服务器可以向该主题发送通知,而无需指定单个设备。
https://developers.google.com/cloud-messaging/topic-messaging
您可以将所有设备订阅到一个名为“global”的主题,然后将消息发送到“/topics/global”,而不是将它们发送到所有registration_ids。
有没有办法在不通过注册 ID 的情况下向所有设备发送消息?
没门。
在 GCM 上成功注册后,您(Android 应用程序)应该将注册 ID 发送到您的应用程序服务器并将它们存储在某个地方,例如在数据库中。此注册 ID 将用于向特定设备发送通知。
向所有设备发送通知意味着然后从该数据库中选择所有注册 ID,然后如您所说,将它们放入一个数组中并将它们进一步传递给 GCM。
更新:借助 Firebase 云消息传递,现在可以使用https://firebase.google.com/docs/cloud-messaging/android/topic-messaging发送通知,而无需明确指定注册 ID。
您需要发送设备的 reg id 列表,并且此列表不应超过 1000,这是 GCM 的限制,如果您想向 1000 多个设备发送消息,那么您需要以 1000 个块为单位打破列表。
是的,有一种方法可以向所有人发送消息!
只需在“to”字段中发送“/topics/global”值,而不是在“registration_ids”字段中发送 id。
例如在 php 中:
'to' => "/topics/global",
而不是这个:
'registration_ids' => $this->devices
创建notification_key
,它通过将特定组映射到该组的所有关联注册令牌来标识设备组(您可以在应用服务器上创建通知密钥)。使用notification_key
, 而不是一次向一个注册令牌发送一条消息,应用服务器可以向 发送一条消息notification_key
,然后 GCM 将该消息发送给该组的所有注册令牌。
另请注意,notification_key 允许的最大成员数为20。
Google Dev 站点特别为此主题添加了新指南。 https://developers.google.com/cloud-messaging/notifications#sending_downstream_messages_to_device_group
我认为这里有一个混淆。我使用了 github 示例代码(例如部署到 Tomcat 的 Java 应用程序服务器)和 Android 应用程序。在那里,我没有向应用服务器“传递”或“发送”任何注册 ID。它调用相关 API 来检索注册 ID 并使用它们发送通知。为什么每个关于 GCM 注册 ID 的帖子都说需要将注册 ID 传递给 3rd 方应用服务器?恐怕我不同意。我认为第 3 方应用服务器可以查询 GCM 服务器本身以找出哪些设备已注册以接收来自特定发件人(发件人 ID)的通知。必须手动将注册 ID 传递给第 3 方应用服务器,这违背了自动化流程的全部目的。也许我在这里遗漏了一些东西,或者我正在使用已弃用的内容。反正,