今天我們來說下怎么自己建一個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, 剩下的我們下次再看看