測試妹子的吶喊:為什么總是收不到推送?


文章首發於【博客園-陳樹義】,點擊跳轉到原文《測試妹子的吶喊:為什么總是收不到推送?》

小樹最近在開發公司 App 的一個新的功能,需要在用戶上線的時候,給關注了她的用戶發送一條推送消息。小樹很快就完成了開發, 但測試人員卻反饋說無法正常接收到推送。這可讓小樹着急死了,但小樹調用的是原來的推送接口,對推送的相關業務並不熟悉。於是小樹准備尋求資深工程師小黑的幫助。

蘋果推送的沙盒環境

小樹描述了以下問題,經驗豐富的小黑立刻看出了端倪所在,問小樹:是不是忘記設置推送類型為沙箱模式了?

此時的小樹一臉茫然,趕緊問:什么是沙箱環境啊?

沙箱環境其實就是測試環境的意思,這是蘋果系統習慣性的稱呼。為了方便描述,我們下面還是用測試環境來替代沙箱環境吧。

小樹聽完連忙點頭,之后又繼續發問:那就是說推送系統也有測試環境和正式環境之分?

小黑不急不忙地跟小樹說:那是肯定的啊。如果沒有區分測試環境和線上環境,那我們在測試新功能的時候豈不是會干擾到線上用戶的正常使用。

小黑接着說道:所以你提供給測試人員測試時,需要提供測試環境的推送,這樣測試人員測試的時候才能正常收到推送。而當我們功能開發完成,需要發布到線上時,我們需要使用線上環境的推送。

小樹聽完之后趕緊將推送類型改為測試模式,之后讓測試妹子再次測試。果不其然,這次果然能收到推送提醒了。

什么是蘋果推送服務

雖然問題解決了,但小樹還是感覺有什么東西沒搞懂,於是坐在座位上冥思苦想,想了解一下推送的整個流程。

在一旁的小黑看到了小樹皺着眉頭,於是拿起紙和筆畫起了圖跟小樹講解起來。

對於蘋果的 iOS 系統來說,它有自建的官方推送服務 APNS(Apple Push Notification service)。當我們的手機處於開機狀態時,iOS 系統內置的一個推送服務便會一直處於運行的狀態,並與 APNS 服務器保持長連接,隨時准備接收APNS服務器的推送消息。

當我們向 APNS 服務器發送一條推送消息時,APNS 服務器就會將消息推送給對應的設備。而對應的 iOS 設備接收到推送消息后,又會將消息傳遞給對應的 APP 處理。

什么是DeviceToken

小樹接着問:這個世界上的 iOS 設備那么多,APNS 服務器怎么知道這條消息是要推送給哪個設備的呢?

小樹問的問題真是問到點子上了,小黑高興地誇獎道。

要解答你這個問題,那就必須提一下DeviceToken這個東西。只要有 DeviceToken,那么APNS 服務器就知道將消息推送到哪台 iOS 設備上。

小樹接着問:那也就是說 DeviceToken 是跟設備綁定的咯?

其實你只答對了一半。

其實 DeviceToken 是跟設備和App綁定在一起的。不同設備的同一應用,它們的 DeviceToken 是不同的。同一設備的不同應用,它們的 DeviceToken 也是不同的。

還記得我們每次新裝一個應用的時候都會彈出一個「是否允許XXX給你發送系統消息」的提示嗎?

當你點擊「允許」之后,你的手機便會向 APNS 服務器請求生成一個 DeviceToken,此時 APNS 服務器便將這個 DeviceToken 和這個 iOS 聯系起來了。除非你將應用卸載,否則這個 DeviceToken 就一直跟你的這個設備和這個應用綁定在一起了。

當我們需要發送推送消息時,APNS 服務器便會根據我們傳遞的 DeviceToken 參數尋找到對應的長連接,再將要發送的數據通過長連接推送到對應的設備上。

小樹聽完連連稱贊,沒想到一個簡單的推送還有這么多學問。

蘋果推送的流程

小黑看着小樹似懂非懂的樣子,於是讓小樹試着描述一下整個蘋果推送的流程,借此看看小樹是否真的掌握了。

小樹聽到了躍躍欲試,開始滔滔不絕地講起來。

第一步,當我們啟動應用后 App 彈出是否允許「系統通知」的請求,我們點擊允許后,iOS 設備向 APNS 服務器請求一個 DeviceToken。此時,APNS 服務器將這個 DeviceToken 與該 iOS 設備綁定起來。

第二步,當我們需要發送推送消息時,我們請求我們的后台服務器,告訴它我們要發一條推送消息給某個 DeviceToken。后台服務器接收到消息后轉而請求APNS 服務器的沙箱環境接口或線上環境接口。

第三步,當 APNS 服務器接收到請求后,它根據 DeviceToken 取出之前已經建立的與該 iOS 建立的長連接,最后將需要發送的內容輸出到該長連接中。

第四步,與 APNS 服務器建立長連接的 iOS 設備接收到消息后,分析這個 DeviceToken 屬於哪個 App,並將其分發給對應的 App 進行處理。

整個流程大概像下面這張圖描述的這樣:

小黑聽完小樹的復述不由得感慨,現在的年輕人學東西還蠻快的嘛,講了一遍就都記住了。

舉一反三的小樹又發問了:那安卓系統是不是也有對應的官方推送啊?

那肯定的啊,不過我們這個留着下次你遇到問題再講吧。遇到問題再學習,印象更加深刻。小黑故意埋了一個關子。


你所看到是推送系列文章中的一篇,更多關於推送的文章:

文章首發於【博客園-陳樹義】,點擊跳轉到原文《測試妹子的吶喊:為什么總是收不到推送?》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM