我是GCM的新手。我想向所有安装了该应用的设备发送消息。我读到了registration_id:在第一次连接到GCM后,谷歌将这个唯一的字符串发送给设备。我是服务器世界的初学者,但如果我没有弄错,在服务器端,为了向设备发送通知,我必须发送registration_id数组和google消息。
Google知道注册ID是怎么回事? 有没有办法在没有通过注册号码的情况下向所有设备发送消息? 谢谢。
答案 0 :(得分:15)
使用GCM 3.0,现在可以通过主题支持向所有设备发送通知。应用程序必须包含一个或多个主题,服务器可以向该主题发送通知,而无需指定单个设备。
https://developers.google.com/cloud-messaging/topic-messaging
您可以将所有设备设置为名为“global”的主题,然后将消息发送到“/ topics / global”,而不是将其发送到所有registration_ids。
答案 1 :(得分:11)
有没有办法在不通过注册商ID的情况下向所有设备发送消息?
没办法。
在GCM上成功注册后,您(Android应用程序)应将注册ID发送到您的应用程序服务器并将其存储在某个地方,例如数据库中。此注册ID将用于向特定设备发送通知。
要向所有设备发送通知,则意味着从该数据库中选择所有注册ID,如您所述,将它们放入数组并将其进一步传递给GCM。
更新:借助Firebase Cloud Messaging,现在可以使用https://firebase.google.com/docs/cloud-messaging/android/topic-messaging发送通知,而无需明确指定注册ID。
答案 2 :(得分:6)
您需要发送设备的reg id列表,并且此列表不应超过1000这是GCM的限制如果您要向1000多台设备发送消息,那么您需要以1000块的形式打破列表
答案 3 :(得分:6)
是的,有办法向所有人发送消息!
只需在'to'字段中输入'/ topics / global'值,而不是在'registration_ids'字段中输入ID。
例如在php中:
set
而不是这个:
'to' => "/topics/global",
答案 4 :(得分: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
答案 5 :(得分:-1)
我认为这里存在混淆。我曾使用github示例代码(例如,部署到Tomcat的Java中的app服务器)和Android应用程序。在那里,我没有“通过”或“发送”任何注册ID到应用服务器。它调用相关API来检索注册ID并使用它们发送通知。为什么每个关于GCM注册ID的帖子都说需要将注册ID传递给第三方应用服务器?我恐怕不同意。我认为第三方应用服务器可以查询GCM服务器本身,以找出哪些设备已注册接收来自特定发件人的通知(发件人ID)。必须手动将注册ID传递给第三方应用服务器,才能实现自动化流程的全部目的。也许我在这里遗漏了一些东西,或者我正在使用已弃用的内容。无论如何,一旦启动,自动化流程如何才能进行人工干预?