Collyn Chen
4 min readApr 18, 2017

--

Apple APNs架構

  1. 何謂APNS
  • Apple Push Notification Service
  • iOS App支援推播的唯一管道(不能讓App隨時隨地在背景執行,只有在限定的條件下可以短暫的背景執行)
  • 官方說明:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//apple_ref/doc/uid/TP40008194-CH8-SW1

2. APNS架構

※不允許app隨時保持一個連線去等待遠端的推播訊息傳送過來。

※左側的Provider A、Provider B可視為一個伺服器,當這些伺服器有特定訊息要發送到特定的iPhone上時,Provider A會把要傳送的內容包裝好傳送給APNS,告訴APNS要將內容發送給哪個iPhone。

※Provider是無法直接連接到user的,只有APNS才有辦法直接接觸到iPhone或iPad。

※推播功能已經拓展到mac上,甚至safari也支援推播功能。

流程如下圖所示:

Provider將訊息發送給APNs,APNs再將訊息傳送給iPhone或iPad,iPhone或iPad可能會送給user app,也可能不會。

※為了省電考量,所以統一由作業系統代收,只有當user點開推播訊息,此時iPhone會點開user app,此時user app才會去跟server重新撈取訊息內容。

※重要觀念:推播通知顯示在鎖定畫面,是作業系統收到推播通知然後顯示出來,而不是user app接收到推播推知,而顯示在鎖定畫面,user app基本上都還在休眠狀態。所以裝置到client app中間才會是虛線而非實線連接。

3. DeviceToken取得
DeviceToken就是手機裝置的識別碼,也就是為什麼APNs知道該把訊息發到哪一隻手機,靠的就是DeviceToken。

Step1.建立SSL連線,連線到APNs主機

Step2.依照App的bundleID跟該手機的UDID,去做某種運算後,APNs會產生出一個deviceToken給iPhone裝置。

Step3. 透過iPhone裝置將deviceToken傳送給Client app。

Step4.Client App必須要將deviceToken傳送給Provider,才能讓Provider知道如何聯繫該iPhone 裝置。

註:當用戶將app移到新設備或重新安裝iOS時,DeviceToken會更改。而且必須要等用戶在新設備開啟app後,才能將remote Notification傳送到該設備.

4. Server(Provider)端功能與注意事項

  • 連接適當的APNS Server:

Apple的憑證分為兩種:一種為development開發用的,另一種為Production產品用上架的。同樣的APNS也分成兩個,一個是提供來測試用的,另一個是供產品正式用的。

  • 安裝適當的PEM憑證:憑證也是區分為development跟production兩套。
  • 保存Client的DeviceToken:Server需保存deviceToken以便後續發送訊息用。
  • 發送適當的Payload至APNs:將訊息組合成APNS規範的Payload格式內容。
  • 防火牆開啟必要的Port:扮演推播功能的server,必須要特別開起某些port。

官方說明如下:

https://support.apple.com/zh-tw/HT203609

5. Payload注意事項

  • iOS8之前:最長256 bytes
  • iOS8之後:最長2048 bytes
  • 採HTTP/2:可達4096 bytes

6. Client(App)端功能與注意事項

  • 使用適當的Provision Profile
  • 取得DeviceToken
  • 回報DeviceToken給Server
  • 處理收到推播時的工作

--

--