我正在为我的android应用程序实现推送通知机制。
现在,我正在尝试进行一个小型测试,以查看是否能够通过Http从python服务器发送推送通知到GCM,并在android客户端中成功接收到该通知。
客户端代码与Google教程中的代码完全相同:http : //developer.android.com/google/gcm/client.html
有一个名为DemoActivity的主要活动,该活动负责注册或检索已经存在的注册ID,还有两个类GcmIntentService和GcmBroadcastReceiver负责处理从GCM服务器到应用程序的消息。
当然,我已经正确设置了SENDER_ID,并且确实设法获得了我的客户端应用程序的注册ID。
现在针对服务器:
在服务器中,我总是收到以下错误:
HTTP Error 401: Unauthorized
这是我的服务器代码:
url = "https://android.googleapis.com/gcm/send"
headers = { 'Content-Type' : 'application/json', 'Authorization': 'key=' + SERVER_API_KEY }
values = { 'registration_ids': [CLIENT_REGID]
, 'data': {'test': 'test} }
data = urllib.urlencode(values)
req = urllib2.Request(url, json.loads(values), headers)
response = urllib2.urlopen(req)
the_page = response.read()
self.response.out.write(the_page)
出于安全原因,我省略了服务器api密钥和客户端注册ID(它们是硬编码的),但我对它们进行了两次和三次检查,它们是正确的。另外,我确保服务器API密钥的格式正确(凭据->创建新密钥->服务器密钥),并确保“允许任何IP”。
我在互联网上找到的所有解决方案都与服务器api或类似错误有关,但我已经检查过。谢谢帮手!
编辑:
在标头中添加了“ key =”,但现在我收到错误的请求错误(HTTP代码400)
另一个编辑:
更改值对象并使用json.loads将其发送,但不是我在客户端出现此错误(意味着它最终从服务器接收到通知!):
Unable to instantiate receiver GcmBroadcastReceiver
有任何想法吗?我照原样从google复制了示例项目,所以我不知道这里出了什么问题。
在身份验证标头应为(注意key=
部分):
Authorization:key=<your_key_here>
所以你应该这样设置标题:
headers = { 'Content-Type' : 'application/json', 'Authorization': 'key='+SERVER_API_KEY }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句