python3 三行代码基于HTTP2完美实现APNS推送【详解】
第一次做苹果APNS(Apple Push Notification service)推送,关于APNS推送原理以及证书的获取方式网上已经有许多资料,在此不做过多赘述,需要注意的是证书分为测试证书和正式证书两种,建议直接用通用版的正式证书
大家可以参考网上的这篇博客:点击这里查看
从苹果下载到的证书是.cer格式的,若要完成推送,需要转换为.pem格式,python已自带openssl,此步骤需要输入之前设置的密码:
openssl pkcs12 -in Development.p12 -out developent.pem
要进行python推送,自然少不了安装相应的python包:
pip install applepush
至此便可尝试推送:
from applepush import ApplePush
apns =ApplePush('证书文件名称','bundle ID')
resp =apns.single_push('苹果设备token',"推送内容")
如果成功实现推送,那恭喜你没有踩到坑,如果推送失败,请参考以下解决方案:
1.如果是测试环境,请确认是否是 测试环境下的DeviceToken+测试证书/通用的正式证书+测试服务器
如果是从App Store下载的正式环境,请确认是否是 正式环境下的DeviceToken+通用的正式证书+正式服务器
关于正式服务器与测试服务器地址,可参照官网进行对比:点此查看
2.如果是正式环境,会回复BadDeviceTocken,需要在下载的python包中做修改:
打开安装目录下Anacoda3\Lib\site-packages\applepush\core.py文件,将url地址改为以下,正式的服务器地址:
def __init__(self, cert, apns_topic):
self.cert = cert
self.headers = {"apns-topic": apns_topic}
self.api_url = 'api.push.apple.com:443'
self.api_path = '/3/device/%s'
Development server:
api.development.push.apple.com:443Production server:
api.push.apple.com:443
也可自行添加推送参数或修改代码使其兼容正式服务器与测试服务器:
def single_push(self, token,alert,content,badge=1):
"""
发送单个设备
:param token:设备
:param alert:弹出的消息
:param badge:红点数字
:return:
"""
token = self.handle_token(token)
payload = {
"aps":{
"alert":{
"title":alert, # iOS7、8设置无效,iOS9一般设置为appName
#"subtitle":EXCEPTIONTYPES, # 一般使用title就能满足需求
"body":content
},
"badge":1, #角标数
"sound":"default", #声音
"userinfo":{ #通知内容信息
"playid":"",
"username":"tom",
"sex":1
}
}
}
self.api_url1 = 'api.development.push.apple.com:443'
conn = HTTPConnection(self.api_url, ssl_context=tls.init_context(cert=self.cert))
conn.request('POST', self.get_api_path(token), body=json.dumps(payload), headers=self.headers)
resp = conn.get_response()
if resp.status==200:
return self.make_response(resp)
else:
conn = HTTPConnection(self.api_url1, ssl_context=tls.init_context(cert=self.cert))
conn.request('POST', self.get_api_path(token), body=json.dumps(payload), headers=self.headers)
resp = conn.get_response()
return self.make_response(resp)
python3 三行代码基于HTTP2完美实现APNS推送【详解】的更多相关文章
- 基于B/S模式的推送
基于B/S模式的推送 https://www.ibm.com/developerworks/cn/web/wa-lo-comet/ 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.这 ...
- 手把手教你配置苹果APNS推送服务|钿畑的博客 | 钿畑的博客
http://www.360doc.com/content/15/0118/17/1073512_441822850.shtml# 钿畑的文章索引 1. 什么是推送通知 2. 什么是APNS? 3. ...
- Android 基于Netty接收和发送推送解决方案的消息字符串(三)
在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> .我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...
- 基于双向BiLstm神经网络的中文分词详解及源码
基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码 ...
- APNS推送原理详解
推送是解决轮询所造成的流量消耗和电量消耗的一个比较好的解决方案,在Android上,虽然Google提供了GCM(之前为C2DM),但在国内基本等于没用,各大Android应用基本都自己架设推送Ser ...
- php课程 1-3 web项目中php、html、js代码的执行顺序是怎样的(详解)
php课程 1-3 web项目中php.html.js代码的执行顺序是怎样的(详解) 一.总结 一句话总结:b/s结构 总是先执行服务器端的先.js是客户端脚本 ,是最后执行的.所以肯定是php先执行 ...
- iOS apns推送
前言:推送分为本地推送以及远程推送. 两者的区别为本地推送一般为定时推送.定期推送或者位置推送.而远程推送更为多样化,能满足较高的要求.当然远程推送需要服务器端开发,开发流程较复杂. 1.本地推送只需 ...
- iOS开发之功能模块--Apns推送中的的json格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面接受我在进行apns推送时候总结的一点apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...
- Apns推送中的的json格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面接受我在进行apns推送时候总结的一点apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...
随机推荐
- [转]敏捷开发需求管理(产品backlog)
传统的瀑布工作模式使用详细的需求说明书来表达需求,需求人员负责做需求调研,根据调研情况编制详细的需求说明书,进行需求评审,评审之后签字确认交给研发团队设计开发.在这样的环境下,需求文档是信息传递的主体 ...
- 教你怎么让vi和vim显示行数
首先我们来看看没有行号是多么难看. 2 再来看看有行号后的效果. 3 设置行号很简单. 我们要到命令模式下,输入set number :set number 按下回车 来看看效果 4 那么怎么关闭行号 ...
- servicemix-3.2.1 部署异常
<jbi-task xmlns="http://java.sun.com/xml/ns/jbi/management-message" version="1.0&q ...
- Django入门3--Models
- P1100 三连击
题目描述 我们假设一个三位整数 \(N(100 \le N \le 999)\) ,它的百位上的数字是 \(A\) ,十位上的数字是 \(B\) ,个位上的数字是 \(C\) ,如果 \(A\) , ...
- 2018-8-10-win10-uwp-获取文件夹出错
title author date CreateTime categories win10 uwp 获取文件夹出错 lindexi 2018-08-10 19:16:50 +0800 2018-2-1 ...
- H3C VLAN基本配置
- 头条面试题-创建一个Event类,并创建on、off、trigger、once方法
一.创建一个Event.js class Event { constructor() { this.handlers = { // 记录所有的事件和处理函数 } } /* * * on 添加事件监听 ...
- 【35.53%】【POJ 2912】Rochambeau
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2837 Accepted: 1008 Description N childre ...
- CSS3 彩色渐变动效按钮
<!DOCTYPE html> <html> <head> <title>Crayon Animate</title> <style ...