1. 程式人生 > >iOS 推送服務的簡易原理與配置

iOS 推送服務的簡易原理與配置

補充 com 思考 lib email p12 sig 導出 文件的

最近的項目需要用到iOS的push功能,在配置push功能的過程中遇到了一些不清楚的地方,經過查閱資料和思考,已有初步認識,下面進行一下梳理,我們的服務器端用的是Facebook的Parse。

完整的push流程是這樣的,服務器端將信息傳遞給APNS(Apple Push Notification Service),再由APNS將信息push到目標設備。

服務器——APNS

服務器與APNS之間是通過SSL(Secure Sockets Layer)協議進行通信的,簡單的原因應該是這樣的,Apple的推送服務器肯定不能隨便接受外界的push請求,只有經過它的認證才可以,於是我們的服務端程序需要有一個Apple授予的SSL證書。這個證書怎樣獲得呢?分幾步:

1.生成SSL證書請求文件CertificateSigningRequest.certSigningRequest

  • 打開Keychain Access
  • 選擇Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority…
  • 填寫Email

技術分享

2.將SSL證書請求文件上傳至 Apple Developer Member Center以取得真正的SSL證書,我們假設已經創建好了App ID

  • 在Member Center中選擇 Certificates, Identifiers & Profiles,選擇 Identifiers,進入相應的App ID,選擇Settings。

技術分享

  • 向下滑動頁面至 Push Notifications,在這裏我們就可以創建即將配置在服務器上的SSL證書了,開發證書和發布證書申請的流程是一樣的,我們這裏以開發證書為例。

技術分享

  • 在下一頁點擊Continue,我們將會被要求上傳之前生成的Certificate Signing Request (CSR)文件,即CertificateSigningRequest.certSigningRequest。
  • 上傳後點擊Generate,至此SSL證書便生成出來了,我們需要將它下載到本地,本地便有了這樣一個文件aps_development.cer。

3.將SSL證書配置在服務器端

雖然本地已經有了服務器端所需的SSL證書aps_development.cer,但是它並不能直接送給服務器端,還需要一點工序,如何加工請看下面的流程。

  • 雙擊SSL證書aps_development.cer,它將自動導入到Keychain中,註意觀察雙擊前後Keychain Access中的變化。
  • 在Keychain Access的"My Certificates"分類中右擊剛才導入SSL證書(名字是Apple Development iOS Push Services:App的Bundle ID),選擇圖中的Export。
技術分享
  • 選擇Export後會出現一個頁面,以便我將證書以.p12格式導出,.p12是服務器端所需的文件,至少是Parse所需的。*註意*,一定確保上一步中我們選中了"My Certificates"分類,否則在這一步中.p12格式是disable的。終於得到了服務器端所要的“Apple簽證”,按照服務器端的配置要求去配置吧,在Parse中只需將這個.p12文件上傳就可以了。
技術分享

至此,服務器端——APNS已打通,我們繼續考慮APNS——設備之間的通信。

APNS——設備(設備將Push信息分發至App)

APNS怎麽知道要將服務器端要將信息push給哪個設備或是哪一群設備呢?顯然是服務器端將目標設備告訴了APNS,經了解,APNS要求服務器端以JSON(JavaScript Object Notation) 格式將目標設備的Device ID集合告訴它,然後它再將push信息發到相應設備上,push信息到了設備,設備再根據push信息內容把push信息指定到具體的App。於是,設備中安裝的App也需要有一些能夠驗明正身的東西,這個東西肯定也是由Apple Developer Member Center提供的。

1. 創建Provisioning Profile

  • 在Member Center中選擇 Certificates, Identifiers & Profiles,然後在Provisioning Profiles頁面的右上方點擊“+”。
  • step by step ,最終會讓我們填寫一個 provisioning profile的名字,然後就生成了文件。
2. 配置App
  • 將provisioning profile下載到本地,雙擊,自動導入到Xcode。
  • 在Xcode中設置code signing。
技術分享

到這裏,App的驗明正身工作已經做完了,服務器端——APNS——設備(準確的說是App)全部打通,剩下就是代碼層面的工作了。最後總結一下Apple Push的配置,想要實現Server——APNS——App的Push通信,就要讓APNS認識Server和App,於是需要兩個物件,一個是給Server的SSL證書(最終形式為.p12),一個是給App的provisioning profile,這兩個物件肯定都是要向Apple申請的,這便是上面一系列流程要達到的目的。

另外,再補充一點關於CertificateSigningRequest.certSigningRequest文件的事情,這個文件是我們向Apple申請證書的證書請求文件,在Keychain Access中可以隨意生成,那麽,每次制作證書都要生成一次嗎?不是的,這個CertificateSigningRequest.certSigningRequest文件中可能只是包含一些Mac設備信息,時間戳等,在同一臺Mac上生成的多個CertificateSigningRequest.certSigningRequest文件可能只是時間戳不同,其他是一樣的,所以它只需生成一個,之後做各種SSL證書均可使用。

iOS 推送服務的簡易原理與配置