激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python搭建APNS蘋果推送通知推送服務的相關模塊使用指南

Python搭建APNS蘋果推送通知推送服務的相關模塊使用指南

2020-08-25 09:26piglei Python

這里總結了一份Python搭建蘋果推送通知推送服務的相關模塊使用指南,包括PyAPNs、基于twisted框架的pyapns以及apns-client三個模塊的介紹,需要的朋友可以參考下

APNS 是蘋果為IOS設備提供的推送服務,全稱是(Apple Push Notification service)。 如果你有接觸移動互聯網相關的開發的話,應該對它很熟悉。

接下來我會給大家簡單介紹一下Python下的一些APNS相關的模塊以及其特點。

模塊介紹:

PyAPNs

項目地址: https://github.com/djacobs/PyAPNs
PyAPNs是我最早使用的APNS模塊,它應該是我要介紹的所有模塊里面最簡單的,最新的源碼 只有384行,實現了APNS的基本功能,包括發送推送、使用Frame群發推送、feedback 接口等。

它的所有驗證都是在客戶端做的,比如每一個Payload不超過256字節。
簡單來說,就是盡量復用你的鏈接,不要頻繁的建立和斷開,不然會被當做DoS攻擊處理。所以 我們使用它來發送推送時應該這么干:

?
1
2
3
4
... ...
 
# 復用這個gateway_server
apns.gateway_server.send_notification(token_hex, payload)

復用這個gateway_server也就是連接,但是到APNS Server的鏈接是很不穩定的,很多情況下 都會被斷開,比如網絡原因、發送了非法的token等。所以我們還需要一個重連的機制。

但PyAPNs模塊沒有為你處理這些,所以你需要自己去處理那些出錯的情況,這也是使用 這個模塊最不方便的地方。

所以我的建議是,除非你自己需要去寫一個APNS的Provider,那你可以以這個模塊作為起點。 否則,如果你想在你的項目里面快速用上推送服務的話,建議還是選擇別的模塊。

示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import time
from apns import APNs, Frame, Payload
 
apns = APNs(use_sandbox=True, cert_file='cert.pem', key_file='key.pem')
 
# Send a notification
token_hex = 'b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b87'
payload = Payload(alert="Hello World!", sound="default", badge=1)
apns.gateway_server.send_notification(token_hex, payload)
 
# Send multiple notifications in a single transmission
frame = Frame()
identifier = 1
expiry = time.time()+3600
priority = 10
frame.add_item('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b87', payload, identifier, expiry, priority)
apns.gateway_server.send_notification_multiple(frame)
 
# Get feedback messages
for (token_hex, fail_time) in apns.feedback_server.items():
# do stuff with token_hex and fail_time
對于更復雜的alerts,比如自定義按鈕,可以使用PayloadAlert類
alert = PayloadAlert("Hello world!", action_loc_key="Click me")
payload = Payload(alert=alert, sound="default")

pyapns(twisted)

項目地址: https://github.com/samuraisam/pyapns
他們使用的就是這個項目作為他們的推送服務的provider,所以我之后把推送從PyAPNs遷移到了這個項目, 使用下來其實還是挺不錯的,這個項目的主要特點是:

它其實是一個基于twisted的server,所有發送推送的請求都通過它來和蘋果的服務器交互。
對Django和Pylons有原生支持。
支持多個APP。
因為和蘋果的推送服務器是由這個provider維持的長連接,所以你每次發送推送的時候都直接 這個provier進行叫交互,這樣的的好處是每一次的接口調用返回都很快,真正推送到蘋果服務器的過程 則是由這個provider異步來完成。

但是這個模塊很長時間都沒有維護了,其實Apple那邊的協議在這段時間里已經進行了一些更新。 但這個模塊沒有跟上。

我使用這個模塊碰到的最大的問題就是 群發推送的效果得不到保證。

雖然這個模塊的demo里面有對批量發送推送進行支持,但是我的使用經驗是,這個模塊的群發 推送效果比較差,而且缺少從蘋果Server拿到錯誤反饋的邏輯。

因為Twisted的代碼風格實在不怎么喜歡,所以我群發碰到問題后開始尋找別的解決方案。

apns-client

項目地址: https://bitbucket.org/sardarnl/apns-client/
總結一下就是:

維持持久鏈接。SSL協議的握手環節是很慢的。當每一個連接被建立之后,它應該一直保持最少幾分鐘來等待 下一次的推送。
支持改進過的的協議格式。Apple的程序員們設計了一個臭名昭著的推送協議。他們更新了一個版本,這個版本可以讓你知道 每一次群發推送里面到底是哪一個單獨的消息出了問題。
清晰的Python API
沒有把驗證這塊寫進代碼里,而是直接返回APNS的錯誤信息
使用這個模塊來發送推送也很簡單:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from apnsclient import *
 
# 可以使用Session對象來維持連接池
session = Session()
con = session.get_connection("push_sandbox", cert_file="sandbox.pem")
 
# 發送推送和得到反饋
messge = Message(["my", "device", "tokens"], alert="My message", badge=10)
 
# Send the message.
srv = APNs(con)
res = srv.send(message)
 
# Check failures. Check codes in APNs reference docs.
for token, reason in res.failed.items():
  code, errmsg = reason
  print "Device faled: {0}, reason: {1}".format(token, errmsg)
 
# Check failures not related to devices.
for code, errmsg in res.errors:
  print "Error: ", errmsg

對于我來說,這個模塊最大的優點就是為你處理了連接有可能被異常斷開重連的情況。而且代碼不像 pyapns這樣晦澀,更直觀,可讀性更高。所以你如果要在它的基礎上做一些修改也沒有任何問題。

經過我的使用經驗,使用apns-client來處理百萬級別這種量級的推送沒有任何問題,到達率也很好。

所以如果你沒有特殊的需求的話,apns-client應該是你最好的選擇。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 狠狠婷婷综合久久久久久妖精 | 爱草在线| 黄色片网站免费在线观看 | av资源在线| 国产成人自拍视频在线观看 | 在线成人免费观看www | 国产五区 | 国产精品久久久久久影院8一贰佰 | 国产精品视频在 | 99sesese| 天天色狠狠干 | 超碰九色 | 日韩视频1 | 欧美一级黄色录相 | 久久精品欧美视频 | 国产亚洲精品久久久久久久久 | 精品一区二区三区欧美 | www.guochan | 国产好片无限资源 | 久草视频在线资源 | 失禁高潮抽搐喷水h | 天天干导航 | 香蕉久草在线 | 国产69精品久久久久99尤 | 久久精品国产久精国产 | 国产一区二区免费在线观看 | 久久精品日产高清版的功能介绍 | 国产精品9191 | 亚洲欧美日韩久久精品第一区 | 电影av在线 | 免费a级黄色片 | 久久精品亚洲精品国产欧美kt∨ | 久久精品4 | 成人在线视频一区 | 91精品久久香蕉国产线看观看 | 久久久精品综合 | 91福利社在线 | 色999国产 | 国产一级二级在线播放 | 91 在线| 看片一区二区三区 |