第一次做苹果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:443

  • Production 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推送【详解】的更多相关文章

  1. 基于B/S模式的推送

    基于B/S模式的推送 https://www.ibm.com/developerworks/cn/web/wa-lo-comet/ 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.这 ...

  2. 手把手教你配置苹果APNS推送服务|钿畑的博客 | 钿畑的博客

    http://www.360doc.com/content/15/0118/17/1073512_441822850.shtml# 钿畑的文章索引 1. 什么是推送通知 2. 什么是APNS? 3. ...

  3. Android 基于Netty接收和发送推送解决方案的消息字符串(三)

    在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> .我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...

  4. 基于双向BiLstm神经网络的中文分词详解及源码

    基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码 ...

  5. APNS推送原理详解

    推送是解决轮询所造成的流量消耗和电量消耗的一个比较好的解决方案,在Android上,虽然Google提供了GCM(之前为C2DM),但在国内基本等于没用,各大Android应用基本都自己架设推送Ser ...

  6. php课程 1-3 web项目中php、html、js代码的执行顺序是怎样的(详解)

    php课程 1-3 web项目中php.html.js代码的执行顺序是怎样的(详解) 一.总结 一句话总结:b/s结构 总是先执行服务器端的先.js是客户端脚本 ,是最后执行的.所以肯定是php先执行 ...

  7. iOS apns推送

    前言:推送分为本地推送以及远程推送. 两者的区别为本地推送一般为定时推送.定期推送或者位置推送.而远程推送更为多样化,能满足较高的要求.当然远程推送需要服务器端开发,开发流程较复杂. 1.本地推送只需 ...

  8. iOS开发之功能模块--Apns推送中的的json格式介绍

    在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面接受我在进行apns推送时候总结的一点apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...

  9. Apns推送中的的json格式介绍

    在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面接受我在进行apns推送时候总结的一点apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...

随机推荐

  1. HDU1686 Oulipo 题解 KMP算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目大意:给你一个子串t和一个母串s,求s中有多少个子串t. 题目分析:KMP模板题. cal_ ...

  2. [Err] 1062 - Duplicate entry '0' for key 'PRIMARY'

    问题描述: sql语句执行的时候,插入语句无法正确执行 问题原因: 主键 重复 出现 0 解决方案: 将主键设置为自增 然而,设置自增后还是可能会出现下面的问题 #1062 – Duplicate e ...

  3. 条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  4. 版本号/缓存刷新 laravel mix函数

    很多开发者会给编译的前端资源添加时间戳或者唯一令牌后缀以强制浏览器加载最新版本而不是代码的缓存副本.Mix 可以使用 version 方法为你处理这种场景. version 方法会自动附加唯一哈希到已 ...

  5. Python--day48--面向对象回顾

    面向对象回顾: 例1: 例2: 特殊方法(要背会):

  6. 深入理解CSS盒模型(转)

    转自:https://www.cnblogs.com/chengzp/p/cssbox.html 基本概念 盒模型的组成大家肯定都懂,由里向外content,padding,border,margin ...

  7. 2018-8-10-win10-uwp-萤火虫效果

    title author date CreateTime categories win10 uwp 萤火虫效果 lindexi 2018-08-10 19:16:51 +0800 2018-2-13 ...

  8. 前端js判断移动端和PC端方法

    首先在js中键入如下代码 var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVers ...

  9. 【矩阵乘法优化dp】[Codeforces 621E] Wet Shark and Blocks

    http://codeforces.com/problemset/problem/621/E E. Wet Shark and Blocks time limit per test 2 seconds ...

  10. 为何D3D11的几个矩阵需要转置?

    在学习D3D11的时候遇到一个问题,事情是这样的: D3D11引入了常量缓存(const buffer)用来实现数据的高速传输,这块儿buffer是CPU Only Write,GPU Only Re ...