Android 谷歌云消息向所有设备发送通知
我是GCM的新手。我想向所有安装了应用程序的设备发送消息。我读到了关于注册id的信息:在第一次连接到GCM之后,google将这个唯一的字符串发送到设备。我是服务器领域的初学者,但如果我没有弄错的话,在服务器端,我必须向设备发送一个通知,我必须向google发送注册id数组和消息 谷歌知道注册号是怎么来的? 有没有一种方法可以在不通过注册者id的情况下向所有设备发送消息? 多谢各位 有没有一种方法可以在不通过注册者id的情况下向所有设备发送消息 不行。Android 谷歌云消息向所有设备发送通知,android,notifications,google-cloud-messaging,Android,Notifications,Google Cloud Messaging,我是GCM的新手。我想向所有安装了应用程序的设备发送消息。我读到了关于注册id的信息:在第一次连接到GCM之后,google将这个唯一的字符串发送到设备。我是服务器领域的初学者,但如果我没有弄错的话,在服务器端,我必须向设备发送一个通知,我必须向google发送注册id数组和消息 谷歌知道注册号是怎么来的? 有没有一种方法可以在不通过注册者id的情况下向所有设备发送消息? 多谢各位 有没有一种方法可以在不通过注册者id的情况下向所有设备发送消息 不行。 在GCM上成功注册后,您(Android应
在GCM上成功注册后,您(Android应用程序)应该将注册id发送到应用程序服务器,并将其存储在某个位置,例如数据库中。此注册id将用于向特定设备发送通知 向所有设备发送通知意味着从该数据库中选择所有注册ID,如您所说,将它们放入一个数组中,并将它们进一步传递给GCM
更新:使用Firebase云消息,现在可以使用发送通知,而无需明确指定注册id。您需要发送设备的注册id列表,并且此列表不应超过1000。这是GCM的限制。如果您想向1000多台设备发送消息,则需要将列表分为1000块。我认为有这里很混乱。我使用了github示例代码(例如部署到Tomcat的Java应用服务器)和Android应用程序。在那里,我没有向应用服务器“传递”或“发送”任何注册Id。它调用相关的API来检索注册ID并使用它们发送通知。为什么每个关于GCM注册ID的线程都说需要将注册ID传递给第三方应用服务器?恐怕我不同意。我认为第三方应用服务器可以查询GCM服务器本身,找出哪些设备已注册以接收来自特定发件人的通知(发件人id)。必须手动将注册ID传递给第三方应用程序服务器,这将无法实现整个过程的自动化。也许我在这里遗漏了什么,或者我正在使用不推荐的内容。无论如何,一个自动化的过程一旦启动怎么会涉及到手动干预?借助GCM 3.0,现在可以向所有设备发送通知,这要归功于主题支持。应用程序必须订阅一个或多个主题,服务器可以向该主题发送通知,而无需指定单个设备
您可以将所有设备订阅到一个名为“全局”的主题,然后将消息发送到“/topics/global”,而不是将它们发送到所有注册ID。是的,有一种方法可以向所有人发送消息 只需在“收件人”字段中发送“/topics/global”值,而不是在“注册ID”字段中发送ID 例如,在php中:
'to' => "/topics/global",
而不是这个:
'registration_ids' => $this->devices
创建
通知密钥
,该密钥通过将特定组映射到组的所有关联注册令牌来标识设备组(您可以在应用程序服务器上创建通知密钥)。
使用通知密钥
,应用服务器可以向通知密钥
发送一条消息,而不是一次向一个注册令牌发送一条消息,然后GCM将该消息发送给该组的所有注册令牌
还请注意,通知密钥允许的最大成员数为20
GoogleDev网站特别为这个主题添加了一个新的指南。
好的,非常感谢您的及时回复。。我将在我的服务器上创建一个db,并将所有设备注册id的查询结果放入通知请求中。谢谢。这不再是正确的答案了。Android推送基础设施的更新使此答案过时。感谢您的回答,我已经阅读了1000个限制。您需要将注册id存储到数据库中。请看一下我的解决方案:我没有使用您的示例,但是,如果我没有弄错的话,我使用以下配置:
1。应用程序启动:应用程序在谷歌服务器上注册设备。2.我在服务器的数据库上发送设备的“唯一代码”。3.服务器:如果我要向某些设备发送通知,我会从数据库中查询“唯一代码”,然后将其发送到google服务器。4.只有选定的设备才会收到通知。
您必须向google server提供一组设备ID,因此必须将这些ID存储到您的服务器中。Daniel,订阅一个主题的设备能超过1000台吗?通常的api限制1000个注册ID。这里有类似的限制吗?我不知道限制,但超过1000个。在我们转到OneSignal之前,我的应用程序确实有数千台设备被使用