我似乎在花费数小时试图弄清楚出了什么问题。感觉我完全误解了一些东西。所以这就是事情:
在尝试使C2DM工作的同时,我首先在Google的C2DM服务上注册了一个专门的电子邮件地址。那是我想用来从服务器向客户端发送消息的那个。然后我将代码添加到客户端应用程序并注册设备以进行C2DM。获取的注册ID将发送到服务器并存储在db。
中当我尝试向设备发送消息(无论我使用curl
还是php)时,问题就出现了。发送到我在第一时间注册到C2DM服务的帐户可以完美地运行。但是,使用
Error=NotRegistered
发送到任何其他设备失败。我只是不明白为什么。我使用注册帐户中的auth key
和我从客户端创建的registration id
。我已经(重新)创建了registration id
数百次,但根据Google代码页
Error=NotRegistered
表示registration_id
无效。
尝试澄清:
我可以完美地将邮件发送到链接到我用来注册C2DM的Google帐户的注册ID。将消息发送到不同注册ID的所有其他尝试都会失败。所以我基本上可以将消息发送到一个注册ID。
也许我应该检查一下我对C2DM的理解:服务器是否仅限于向单个设备发送消息?我以为服务器可以向已经提交注册ID的每个设备发送消息......
我缺少什么/误会?
万分感谢,Steff
答案 0 :(得分:2)
它发送给哪些设备没有限制。更有可能的是,您发送的注册ID错误,或者您发送的设备未成功注册。
我建议仔细检查注册ID,如果可以,请在另一台设备上进行测试,确保在向Google的服务器提交消息时获得200响应,并确认设备肯定已成功注册以接收C2DM消息
我也建议你阅读这篇文章。这是我见过的最好的C2DM教程。 http://www.vogella.de/articles/AndroidCloudToDeviceMessaging/article.html
答案 1 :(得分:1)
服务器端代码中有令牌信息,允许您选择要发送消息的设备,当您想要将消息发送到其他设备时,是否更改了此令牌(转换为其他设备的令牌)?
答案 2 :(得分:1)
我有同样的问题,未来:'背景资料' (手机配置)被禁用。打开它就解决了这个问题。
答案 3 :(得分:0)
我认为您的问题是您在注册客户端时总是需要使用您用来设置c2dm的帐户。
您需要确保客户端手机在手机上有一个活跃的Google帐户(无关紧要),但是当您注册时,您需要使用您用于注册该应用的帐户。我认为它被用作某种类型的标识符,以了解哪个服务器应该能够向应用程序发送通知。可能是Google从上下文中检索到手机的标识符。您的应用程序(可能是本地有效的Google帐户)应创建服务器电话的标识符。
答案 4 :(得分:0)
假设您已通过电子邮件“foo@foo.com”注册了C2DM。
随后,您在应用程序中请求注册ID。您之所以只能将推送通知发送到与'foo@foo.com'相关联的注册ID,是因为您应该仅使用您的电子邮件地址请求注册ID 在您注册C2DM时提供。
这会解决您的疑问吗?