久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

JPush iOS based APNs | 極光推送博客

 hh3755 2015-04-14

在 iOS 平臺(tái)上,,大部分應(yīng)用是不允許在后臺(tái)運(yùn)行并連接網(wǎng)絡(luò)的,。在應(yīng)用沒(méi)有被運(yùn)行的時(shí)候,只能通過(guò) Apple Push Notification Service (APNs) 把數(shù)據(jù)發(fā)送到終端用戶,。對(duì)于互聯(lián)網(wǎng)應(yīng)用,,正確高效的使用 APNs 顯然非常重要。

JPush 為 iOS,、Android 平臺(tái)提供了一個(gè)統(tǒng)一推送消息的平臺(tái),,而對(duì) APNs 接口的封裝管理是其中非常重要的一部分。本文分享一下 JPush 團(tuán)隊(duì)在使用 APNs 過(guò)程中碰到的問(wèn)題以及我們的解決辦法,,以幫助應(yīng)用開(kāi)發(fā)者更好的理解 APNs,。

Apple 為應(yīng)用開(kāi)發(fā)者提供了一個(gè) APNs  推送接口,稱為 binary interface,。

Binary Interface V1

最初版本的 binary interface 協(xié)議如下圖,,這里我們稱之為 v1,。

Binary Interface V1

v1 協(xié)議有幾個(gè)問(wèn)題:

  1. 消息是否發(fā)送成功沒(méi)有明確的反饋;
  2. 如果一個(gè)消息發(fā)送失敗,,比如因?yàn)?deviceToken 不合法,,APNs 會(huì)在大約 500ms 后斷掉鏈接,在斷鏈前發(fā)送的消息也會(huì)發(fā)送失??;
  3. 經(jīng)我們驗(yàn)證,feedback service 只有報(bào)告應(yīng)用被卸載后,,造成 deviceToken 失效的錯(cuò)誤,。而不會(huì)報(bào)告 deviceToken 不合法這種類型的推送錯(cuò)誤。

也就是說(shuō)如果我們給一批用戶發(fā)消息,,只要有一個(gè) deviceToken 不合法,,將會(huì)有可能造成若干個(gè)用戶收不到消息。并且沒(méi)辦法確認(rèn)哪些 deviceToken 不合法,,哪些 deviceToken 需要被重發(fā),。這應(yīng)該是 APNs 丟消息的一個(gè)重要的原因。

Binary Interface V2

經(jīng)過(guò)開(kāi)發(fā)者不斷的向 Apple 反饋這個(gè)問(wèn)題,,Apple 終于推出了一個(gè)新版本的 binary interface,,稱為 enhanced binary interface,我們稱這為 v2,。

Binary Interface V2

我們發(fā)現(xiàn),,在 v1 的基礎(chǔ)上增加了兩個(gè)字段:

Identifier —— 一個(gè)任意的值,用于一條消息的識(shí)別,。如果發(fā)送出現(xiàn)問(wèn)題,,錯(cuò)誤應(yīng)答里會(huì)把 Identifier 帶回來(lái)。

Expiry —— 離線消息超時(shí)的時(shí)間,,如果為0或者小于0,,APNs 不會(huì)保存這條消息。

和 v1 一樣,,如果消息發(fā)送沒(méi)有問(wèn)題,,APNs 不會(huì)有任何返回。和 v1 不同,,并且很重要的改進(jìn)是,,如果發(fā)送出現(xiàn)錯(cuò)誤,v2 會(huì)在斷鏈之前返回一個(gè)錯(cuò)誤應(yīng)答,,帶上發(fā)消息時(shí)的 Identifier 和一個(gè)錯(cuò)誤碼,。

error-response packet

根據(jù)這個(gè)錯(cuò)誤應(yīng)答,我們有機(jī)會(huì)找到是哪條消息發(fā)送出錯(cuò),,并確定哪些消息需要被重發(fā),。

JPush 的解決辦法

為了確保每一位用戶都能正確的收到消息,,JPush 目前已經(jīng)放棄 binary interface v1,完全采用 binary interface v2,。(在我寫這篇文章時(shí),,發(fā)現(xiàn) Apple 已經(jīng)把文檔中對(duì) binary interface v1 的描述移除,看來(lái) Apple 也已經(jīng)放棄 v1)

在系統(tǒng)設(shè)計(jì)上,,我們?yōu)槊恳粋€(gè) APNs 鏈接維護(hù) 一個(gè)已發(fā)送列表,,按發(fā)送的先后順序排序。如果收到發(fā)送錯(cuò)誤應(yīng)答,,根據(jù)返回的 Identifier 找到出錯(cuò)的消息,,從該消息的下一條重新開(kāi)始發(fā)送。

發(fā)送隊(duì)列

總結(jié)

為了持續(xù)提高 JPush 推送服務(wù)的質(zhì)量,,我們團(tuán)隊(duì)做了很多研究和嘗試,。APNs 管理模塊我們最初用 C 語(yǔ)言實(shí)現(xiàn)了一個(gè)版本,后來(lái)覺(jué)得用 Erlang 實(shí)現(xiàn)可能更方便,,所以又從頭開(kāi)始學(xué)習(xí) Erlang 并重新用 Erlang 寫了一個(gè)版本,,目前使用效果良好。

在 APNs 管理系統(tǒng)改造的過(guò)程中,,包括 JPush 的其他模塊,,都大量的使用了開(kāi)源的模塊或者系統(tǒng),為了回饋開(kāi)源社區(qū),,我們準(zhǔn)備把 APNs 管理系統(tǒng)的 Erlang 實(shí)現(xiàn)開(kāi)放源碼,,敬請(qǐng)期待。

參考

 

7

No related posts.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多