今天我们来说下怎么自己建一个Push推送服务器, 当然还是用的苹果的APNS 这里我们讲的的自己服务器端的实现
在做推送服务器之前我们要先做一些准备动作
#1. 确保你的App ID有启用PushNotifications
这个可以在你的开发者账号中心里面看看你的App ID的Push Notification是否为Enable
如果不是的话就点Edit设置并创建自己的证书, 具体怎么设置和创建证书大家可以看:
http://www.fx114.net/qa-202-108331.aspx
按照上面做完后, 我们把自己的推送证书下载下来, 如果是开发证书下载的名字应该是:aps_development.cer
双击安装, 然后在钥匙串中找到他并导出为p12格式, 这里我们取名: DevelopPush.p12
好了现在我们有一个cer证书跟一个p12文件,
现在我们要用openssl来合成PEM证书, 应为python apns要用PEM格式证书
在终端输入openssl试试看, 如果报错的话就安装一下
sudo easy_install pyOpenSSL
合成PEM证书
1)转换公钥
openssl x509 -in aps_developer.cer -inform der -out public.pem
2)转换私钥
openssl pkcs12 -nocerts -in DevelopPush.p12 -out private.pem
(这时候要输入密码的)
有了这两个pem文件其实就可以测试一下能否连通苹果的服务器了,网上有,就简写了
telnet gateway.sandbox.push.apple.com 2195 (测试是否能连通苹果的推送测试服务器)
Trying 17.172.232.226... Connected to gateway.sandbox.push-apple.com.akadns.net. Escape character is '^]'.
要是出现上面的结果就ok了,然后测试刚才的两个pem:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert public.pem -key private.pem
输完密码之后,要是输出一堆提示信息就算是ok了
下面我们开始准备写推送服务器
首先安装apns
sudo easy_install apns
然后在证书的路径下创建一个pushservice.py, 代码如下:
import time from apns import APNs, Frame, Payload apns = APNs(use_sandbox=True, cert_file='public.pem', key_file='private.pem') # Send a notification token_hex = 'aefa14337e084a6423529dd262f36de607a019529f4a0a4e2b5e5ae885dec578' payload = Payload(alert="Hello World!", sound="default", badge=1) apns.gateway_server.send_notification(token_hex, payload)
执行看看, 如果客户端没有收到通知的话就检查以下三点
1. 证书是否正确, 重新下载aps_developement.cer试试看
2. 手机设置中通知功能是否有打开
3. 项目中以下部分是否有打开
目前我们已经实现了推送一个alert, 剩下的我们下次再看看