我想实现在Android的推送通知?
我preFER不使用现有的插件
会有人给我的code为例介绍如何将消息发送
一直在努力,因为一个星期不关我的尝试已经全成
这是我最后一次尝试:
gcm.py
导入请求
进口JSON
高清send_gcm_message(API_KEY,regs_id,数据,collapse_key =无):
发送GCM消息一个或多个设备,使用JSON数据
API_KEY:从您的控制台(HTTPS的API_KEY://$c$c.google.com/apis/console,找到关键的服务器应用程序中
谷歌云消息传递Android版)
regs_id:一个列表与将要接收消息的设备
数据:将被发送的字典数据
collapse_key:将字符串组消息,看看它的文档:
http://developer.android.com/google/gcm/gcm.html#request
值= {
registration_ids:regs_id,
collapse_key:collapse_key,
'数据':数据
}
值= json.dumps(值)
标题= {
用户代理:GCM-服务器,
内容类型:应用/ JSON的,
'授权':'键='+ API_KEY,
}
响应= requests.post(URL =https://android.googleapis.com/gcm/send
数据=值,
头=头)
回报response.content
views.py
导入设置
从.gcm进口send_gcm_message
@render_to(推/ envoyer_message.html)
高清send_message(要求):
如果不是request.user.is_authenticated():
返回的Htt presponseRedirect('/客户机/登录)
其他:
如果request.method =='POST':
表= MessageForm(request.POST)
如果form.is_valid():
form.save()
reg_id='APA91bFSIEHPOeT2I7ddCqnYtnJ-iAEQfCiR3HArUIz0t5lQUVfIOGhlEIUJCJLY7SWEdwiJCHedLNaSFi6oVqbnsci9-HmpBNiZAa86KD3349AIWMesweUqF2YbfpSBRot1tNLCITRFbYH9g5AO514s8Zzs4ABumA'
味精=测试
发送= send_gcm_message(API_KEY = settings.GCM_APIKEY,regs_id = [reg_id],数据= {'味精':味精},collapse_key =消息)
messages.success(请求,_(u'FormulaireenvoyéAVEC更迭。'))
返回的Htt presponseRedirect(反向(推 - 认可 - envoi))
其他:
表= MessageForm()
返回当地人()
编辑:
这是我的错误:
字段数据必须是一个JSON数组:测试WWW
解决方案
解决
regs_id =名单()
对于设备devices_a:
regs_id.append(device.token_string)
消息= json.dumps(消息)
值= {
registration_ids:regs_id,
collapse_key:消息,
数据:{消息:STR(msg.message)}
}
标题= {
用户代理:GCM-服务器,
内容类型:应用/ JSON的,
'授权':'键='+ settings.GCM_APIKEY,
}
响应= requests.post(URL =https://android.googleapis.com/gcm/send,数据= json.dumps(值),头=头)
R = json.loads(response.content)
msg.nbr_android_recieved = R [成功]
I'd like to implement push notifications in android ?
I prefer not to use an existing plugins
would someone give me an example of code on how to send a message
have been struggling since a week none of my tries have been successfull
This is my last try:
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, 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()
EDIT:
This is the error I get :
Field "data" must be a JSON array: test www
解决方案
SOLVED
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"]
上一篇:如何直接访问数据库和内容提供商之间做出选择?提供商、直接、数据库、内容
下一篇:数据库更新和adapter.notifyDataSetChanged()后列表视图不更新;新和、视图、数据库、列表