天天看點

iOS-推送通知詳解

這是一篇編譯的文章,内容均出自Parse.com的iOS開發教程,同時作者還提供了視訊講解。本文将帶領開發者一步一步向着iOS推送通知的深處探尋,掌握如何配置iOS推送通知的奧義。

介紹一點點背景資料

衆所周知,使用推送通知是一個很棒的、給應用添加實時消息通知的方式。這樣做的結局是,開發者和使用者之間,彼此永遠保持着一種令人愉悅的親密關系。

然而不幸的是,iOS的推送通知并非那麼容易駕馭,往往會搞的開發者精疲力盡,灰心喪氣,無法持久。現在,救星來了!隻要通讀本教程,你就能擺脫這些煩惱,成為一名活力四射,精壯(Robust I mean!)的開發者。

正式開始之前的準備工作

我們先來從Apple Developer網站上建立一個關聯App ID和開發供應配置檔案的SSL證書,來開始這段美好的教程。接着,我們看看在iOS下是如何在解析網站(Parse website)配置解析程式(Parse app)的。最後,我們把這些理論付諸實踐,建立一個帶有推送功能的App,并且将消息推到使用者。

在開始這段美好旅程之前,大家一定要注意iOS模拟器是不支援推送的,是以你必須想辦法找一台真機過來。還有就是要有蘋果開發者協定,之後才能在真機上面進行開發和測試。

建立SSL證書

首先,需要在蘋果開發者網站上建立一個App ID以及關聯的SSL證書,有了這個證書,解析伺服器才能将找到你的App ID,繼而将通知推送到該應用。

建立一個證書請求

首先的首先,我們需要有一個證書簽名請求檔案,之後建立SSL證書才有意義。建立檔案的方法如下:

1.在Mac上運作鑰匙串通路(keychain)

2.選擇鑰匙串通路 > 證書助理 > 從證書頒發機構中請求一個證書

3.輸入你的名字和郵件位址,CA郵件位址預設就可以,不要試圖去進行任何改動。

4.選擇“儲存到硬碟”,這樣就會将剛建立的證書請求檔案下載下傳到電腦桌面上了。

iOS-推送通知詳解

建立并調教一個App ID

每個安裝在你開發者裝置上的iOS程式都需要一個獨有的App ID,友善起見,App ID以反向路徑規則命名,形如com.parseSampleApp,但是一定要注意App ID裡不能包含星号("*")。建立步驟如下:

1.登陸網站Apple Developer Member Center并進入iOS Provisioning Portal。

2.從左邊欄裡點選App IDs。

3.選擇New App ID,然後建立一個新的App ID。一定要確定Bundle Identifier一欄中沒有星号。

iOS-推送通知詳解

4.在你的App ID下面找到Configure,選中。

5.将“Enable for Apple Push Notification service”勾選上,然後點選Development Push SSL Certificate下面的Configure,然後會出現Apple Push Notification service SSL Certificate Assistant設定向導。

6.點選Continue繼續,然後點選Choose File,選中剛建立見的.certSigningRequest檔案。

7.點選Generate開始生成,然後點選Download下載下傳生成的SSL證書。

iOS-推送通知詳解

8.通過keychain程式來安裝下載下傳好的SSL證書。

9.接着在“我的證書”選項先面,找到你剛才安裝名稱形如“Apple Development IOS Push Services: xxx”的證書。

10.輕按兩下證書,選擇“導出”,導出後的檔案字尾名為.p12。這個時候千萬注意!出現密碼提示的時候一定不要添任何東西。

iOS-推送通知詳解

這裡值得注意的一點就是,至此我們隻是将應用的推送通知功能在開發模式中開啟了,是以應用開始正式釋出之前,一定記得要将第四步到第九步的流程重新走一遍,并将第五步中的“Development Push SSL Certificate”改成“Production Push SSL Certificate”。這樣就完美了。

建立一個Provisioning Profile(配置簡介)

Provisioning Profile會驗證運作所開發應用的裝置。而且不管你是建立一個App ID還是去修改現成的,都得重新生成并安裝一遍Provisioning Profile。步驟如下:

1.在iOS Provisioning Portal中選擇Provisioning變遷。

2.點選New Profile

3.填好對應的資訊,確定一下三項(developer certificate、上面剛建立好的App ID以及用于測試的裝置)都沒有遺漏,全都選中。

iOS-推送通知詳解

4.點選Actions一欄下面的Download按鈕下載下傳生成好的Provisioning Profile。

5.輕按兩下下載下傳好的檔案,預設是由iPhone Configuration Utility程式開。

配置Parse App

要想在推送通知中使用Parse功能,必須将此項特性設定成開啟狀态,然後将上面建立好的推送SSL證書上傳上去。步驟如下:

1.在Parse website上找到你的Parse app,然後選擇Settings标簽頁。

2.在iOS Push Notification Settings下面,點選Choose File,然後将之前用keychain導出的.p12檔案上傳上去。

3.如果希望使用者能夠發送推送通知,我們需要将Client push enabled?選項中的Yes勾選上。這個功能對于像即時聊天的軟體非常有用,我們現在将它勾選上,當然開發者需要自行決定是否要開啟這項功能。

4.點選Save儲存。

iOS-推送通知詳解

至此,所有的前提條件都搞完了,馬上進入最激動人心的建立一個具備推送通知應用的環節了,喝口水,開搞。

建立一個具備推送通知的應用

首先,我們需要先對Xcode項目進行一些設定,確定App ID和provisioning profile都被設定成良好的狀态。做開發嗎,

1.在Supporting Files檔案夾下選中ProjectName-Info.plist,對右側視圖中的Bundle Identifier選項進行修改,和你自己建立的App ID保持一緻(形如:com.parseSampleApp)。

iOS-推送通知詳解

2.在左側的菜單中選中剛建立的project檔案,在下面找到Build Settings然後搜尋Code Signing Identity。

3.将對應provisioning profile的所有的值全部設定好。

iOS-推送通知詳解

4.選擇左手邊Targets下面的項目名稱,再次找到Build Settings,來到Code Signing Identity區域,確定所有的值都和新的provisioning profile保持一緻。

代碼環節

接下來就開始進入程式設計模式了。我們需要對應用程式代理(app delegate)進行少量的修改,進而使得我們的應用可以接受到推送通知。步驟如下:

1.注冊裝置需要在app delegate的[application:didFinishLaunchingWithOptions:]方法中調用[application registerForRemoteNotificationTypes:]方法,代碼如下:

  1. - (BOOL)application:(UIApplication *)application 
  2.  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
  3.     ... 
  4.     // Register for push notifications 
  5.     [application registerForRemoteNotificationTypes:  
  6.                                  UIRemoteNotificationTypeBadge | 
  7.                                  UIRemoteNotificationTypeAlert |              
  8.                                  UIRemoteNotificationTypeSound]; 

2.一旦成功,以上方法會在app delegate中執行回調方法[application:didRegisterForRemoteNotificationsWithDeviceToken:] 。我們需要實作這個方法,用它來告知Parse我們的裝置資訊。代碼如下:

  1. - (void)application:(UIApplication *)application  
  2. didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken 
  3.     [PFPush storeDeviceToken:newDeviceToken]; // Send parse the device token 
  4.     // Subscribe this user to the broadcast channel, ""  
  5.     [PFPush subscribeToChannelInBackground:@"" block:^(BOOL succeeded, NSError *error) { 
  6.         if (succeeded) { 
  7.             NSLog(@"Successfully subscribed to the broadcast channel."); 
  8.         } else { 
  9.             NSLog(@"Failed to subscribe to the broadcast channel."); 
  10.         } 
  11.     }]; 

3.廣播頻道(broadcast channel)用于同時聯系到所有使用者,是以很多時候開發者可能需要自己建立一些更精準化的頻道。一旦推送通知被接受但是應用不在前台,就會被顯示在iOS推送中心。反之如果應用剛好處于活動狀态,則交于應用去自行處理。具體我們可以在app delegate中實作[application:didReceiveRemoteNotification]方法。一下示例代碼隻是簡單的将這一需求交由Parse去處理,Parse會建立一個模态警報顯示推送内容。

  1. didReceiveRemoteNotification:(NSDictionary *)userInfo { 
  2.     [PFPush handlePush:userInfo]; 

好了,現在開始在你的iOS裝置上運作一下,一切順利的話,就可以看到從使用者到推送通知之間的一條模态警報請求許可。

發送推送通知

從Parse website發送

  1. curl -X POST "https://api.parse.com/1/push" -H "Content-Type: application/json" \ 
  2. --data '{"key":"your_push_master_key", "channel":"", "type":"ios",\ 
  3. "data":{"alert":"Hello World!"}}' 
  1. // Broadcast "Hello World" 
  2. [PFPush sendPushMessageToChannelInBackground:@"" withMessage:@"Hello World!"]; 

Write the code ,change the world!