9

我是 GCM 的新手。我想向所有安装了该应用程序的设备发送消息。我读到了registration_id:第一次连接到GCM后,谷歌将这个唯一的字符串发送到设备。我是服务器世界的初学者,但如果我没记错的话,在服务器端,为了向设备发送通知,我必须向 google 发送registration_id 数组和消息。

谷歌怎么知道注册ID?有没有办法在不通过注册 ID 的情况下向所有设备发送消息?谢谢你。

4

6 回答 6

15

借助主题支持,现在可以使用 GCM 3.0 向所有设备发送通知。应用程序必须订阅一个或多个主题,并且服务器可以向该主题发送通知,而无需指定单个设备。

https://developers.google.com/cloud-messaging/topic-messaging

您可以将所有设备订阅到一个名为“global”的主题,然后将消息发送到“/topics/global”,而不是将它们发送到所有registration_ids。

于 2015-07-17T19:40:51.027 回答
11

有没有办法在不通过注册 ID 的情况下向所有设备发送消息?

没门。
在 GCM 上成功注册后,您(Android 应用程序)应该将注册 ID 发送到您的应用程序服务器并将它们存储在某个地方,例如在数据库中。此注册 ID 将用于向特定设备发送通知。

向所有设备发送通知意味着然后从该数据库中选择所有注册 ID,然后如您所说,将它们放入一个数组中并将它们进一步传递给 GCM。

更新:借助 Firebase 云消息传递,现在可以使用https://firebase.google.com/docs/cloud-messaging/android/topic-messaging发送通知,而无需明确指定注册 ID。

于 2013-07-31T09:04:39.973 回答
6

您需要发送设备的 reg id 列表,并且此列表不应超过 1000,这是 GCM 的限制,如果您想向 1000 多个设备发送消息,那么您需要以 1000 个块为单位打破列表。

于 2013-07-31T09:35:54.903 回答
6

是的,有一种方法可以向所有人发送消息!

只需在“to”字段中发送“/topics/global”值,而不是在“registration_ids”字段中发送 id。

例如在 php 中:

'to' => "/topics/global",

而不是这个:

'registration_ids'  => $this->devices
于 2015-11-08T15:46:49.607 回答
1

创建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

于 2016-04-20T05:12:29.220 回答
-1

我认为这里有一个混淆。我使用了 github 示例代码(例如部署到 Tomcat 的 Java 应用程序服务器)和 Android 应用程序。在那里,我没有向应用服务器“传递”或“发送”任何注册 ID。它调用相关 API 来检索注册 ID 并使用它们发送通知。为什么每个关于 GCM 注册 ID 的帖子都说需要将注册 ID 传递给 3rd 方应用服务器?恐怕我不同意。我认为第 3 方应用服务器可以查询 GCM 服务器本身以找出哪些设备已注册以接收来自特定发件人(发件人 ID)的通知。必须手动将注册 ID 传递给第 3 方应用服务器,这违背了自动化流程的全部目的。也许我在这里遗漏了一些东西,或者我正在使用已弃用的内容。反正,

于 2013-12-23T06:27:00.537 回答