Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 谷歌云消息向所有设备发送通知_Android_Notifications_Google Cloud Messaging - Fatal编程技术网

Android 谷歌云消息向所有设备发送通知

Android 谷歌云消息向所有设备发送通知,android,notifications,google-cloud-messaging,Android,Notifications,Google Cloud Messaging,我是GCM的新手。我想向所有安装了应用程序的设备发送消息。我读到了关于注册id的信息:在第一次连接到GCM之后,google将这个唯一的字符串发送到设备。我是服务器领域的初学者,但如果我没有弄错的话,在服务器端,我必须向设备发送一个通知,我必须向google发送注册id数组和消息 谷歌知道注册号是怎么来的? 有没有一种方法可以在不通过注册者id的情况下向所有设备发送消息? 多谢各位 有没有一种方法可以在不通过注册者id的情况下向所有设备发送消息 不行。 在GCM上成功注册后,您(Android应

我是GCM的新手。我想向所有安装了应用程序的设备发送消息。我读到了关于注册id的信息:在第一次连接到GCM之后,google将这个唯一的字符串发送到设备。我是服务器领域的初学者,但如果我没有弄错的话,在服务器端,我必须向设备发送一个通知,我必须向google发送注册id数组和消息

谷歌知道注册号是怎么来的? 有没有一种方法可以在不通过注册者id的情况下向所有设备发送消息? 多谢各位

有没有一种方法可以在不通过注册者id的情况下向所有设备发送消息

不行。
在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之前,我的应用程序确实有数千台设备被使用