Android 如何在django中创建推送通知?
我想在android中实现推送通知 我不喜欢使用现有的插件 有人能给我一个关于如何发送消息的代码示例吗 一个星期以来我一直在努力,但没有一次成功 这是我最后一次尝试: gcm.pyAndroid 如何在django中创建推送通知?,android,django,push-notification,django-1.2,Android,Django,Push Notification,Django 1.2,我想在android中实现推送通知 我不喜欢使用现有的插件 有人能给我一个关于如何发送消息的代码示例吗 一个星期以来我一直在努力,但没有一次成功 这是我最后一次尝试: gcm.py import requests import json def send_gcm_message(api_key, regs_id, data, collapse_key=None): """ Send a GCM message for one or more devices, usin
import requests
import json
def send_gcm_message(api_key, regs_id, data, collapse_key=None):
"""
Send a GCM message for one or more devices, using json data
api_key: The API_KEY from your console (https://code.google.com/apis/console, locate Key for Server Apps in
Google Cloud Messaging for Android)
regs_id: A list with the devices which will be receiving a message
data: The dict data which will be send
collapse_key: A string to group messages, look at the documentation about it:
http://developer.android.com/google/gcm/gcm.html#request
"""
values = {
'registration_ids': regs_id,
'collapse_key': collapse_key,
'data': data
}
values = json.dumps(values)
headers = {
'UserAgent': "GCM-Server",
'Content-Type': 'application/json',
'Authorization': 'key=' + api_key,
}
response = requests.post(url="https://android.googleapis.com/gcm/send",
data=values,
headers=headers)
return response.content
views.py
import settings
from .gcm import send_gcm_message
@render_to("push/envoyer_message.html")
def send_message(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/client/login')
else:
if request.method == 'POST':
form = MessageForm(request.POST)
if form.is_valid():
form.save()
reg_id='APA91bFSIEHPOeT2I7ddCqnYtnJ-iAEQfCiR3HArUIz0t5lQUVfIOGhlEIUJCJLY7SWEdwiJCHedLNaSFi6oVqbnsci9-HmpBNiZAa86KD3349AIWMesweUqF2YbfpSBRot1tNLCITRFbYH9g5AO514s8Zzs4ABumA'
msg='test'
send = send_gcm_message(api_key = settings.GCM_APIKEY, regs_id=[reg_id], data={'msg': msg},collapse_key="message")
messages.success(request, _(u'Formulaire envoyé avec succès.'))
return HttpResponseRedirect(reverse("push-confirmation-envoi"))
else:
form = MessageForm()
return locals()
编辑:
这是我得到的错误:
Field "data" must be a JSON array: test www
解决
解决
如果您得到成功响应,则服务器代码正在工作。如果您没有收到通知,问题就出在您的客户端应用程序中。我在同一客户端应用程序中尝试了另一个代码(php),我收到了通知,因此我认为如果一个服务器工作,另一个服务器不工作,那么要么您没有在不工作的服务器中获得成功响应,或者您没有将消息发送到同一个应用程序和设备(请确保您在两台服务器中使用了相同的注册id和api密钥)。它是同一个应用程序和设备(我每个应用程序和设备只有一个),我重试了一次,并得到了与上述相同的响应。还有什么可能是错误的?我做了一些编辑以查看是否有错误,并发现此
字段“data”必须是JSON数组:test www
如果您得到成功响应,服务器代码正在工作。如果您没有收到通知,问题就出在您的客户端应用程序中。我在同一客户端应用程序中尝试了另一个代码(php),我收到了通知,因此我认为如果一个服务器工作,另一个服务器不工作,那么要么您没有在不工作的服务器中获得成功响应,或者您没有将消息发送到同一个应用程序和设备(请确保您在两台服务器中使用了相同的注册id和api密钥)。它是同一个应用程序和设备(我每个应用程序和设备只有一个),我重试了一次,并得到了与上述相同的响应。还有什么可能是错误的?我做了一些编辑以查看是否有错误,发现这个字段“data”必须是JSON数组:test www
regs_id = list()
for device in devices_a :
regs_id.append(device.token_string)
message = json.dumps(message)
values = {
'registration_ids': regs_id,
'collapse_key': "message" ,
'data': {"message":str(msg.message)}
}
headers = {
'UserAgent': "GCM-Server",
'Content-Type': 'application/json',
'Authorization': 'key=' + settings.GCM_APIKEY,
}
response = requests.post(url="https://android.googleapis.com/gcm/send",data=json.dumps(values), headers=headers)
r = json.loads(response.content)
msg.nbr_android_recieved = r["success"]