這是一篇編譯的文章,内容均出自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.選擇“儲存到硬碟”,這樣就會将剛建立的證書請求檔案下載下傳到電腦桌面上了。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iYjRWZzEGN4MDMlRWO0ITYxUzYiBTNxMTM2ATNklzM08CX4IzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
建立并調教一個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一欄中沒有星号。
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證書。
8.通過keychain程式來安裝下載下傳好的SSL證書。
9.接着在“我的證書”選項先面,找到你剛才安裝名稱形如“Apple Development IOS Push Services: xxx”的證書。
10.輕按兩下證書,選擇“導出”,導出後的檔案字尾名為.p12。這個時候千萬注意!出現密碼提示的時候一定不要添任何東西。
這裡值得注意的一點就是,至此我們隻是将應用的推送通知功能在開發模式中開啟了,是以應用開始正式釋出之前,一定記得要将第四步到第九步的流程重新走一遍,并将第五步中的“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以及用于測試的裝置)都沒有遺漏,全都選中。
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儲存。
至此,所有的前提條件都搞完了,馬上進入最激動人心的建立一個具備推送通知應用的環節了,喝口水,開搞。
建立一個具備推送通知的應用
首先,我們需要先對Xcode項目進行一些設定,確定App ID和provisioning profile都被設定成良好的狀态。做開發嗎,
1.在Supporting Files檔案夾下選中ProjectName-Info.plist,對右側視圖中的Bundle Identifier選項進行修改,和你自己建立的App ID保持一緻(形如:com.parseSampleApp)。
2.在左側的菜單中選中剛建立的project檔案,在下面找到Build Settings然後搜尋Code Signing Identity。
3.将對應provisioning profile的所有的值全部設定好。
4.選擇左手邊Targets下面的項目名稱,再次找到Build Settings,來到Code Signing Identity區域,確定所有的值都和新的provisioning profile保持一緻。
代碼環節
接下來就開始進入程式設計模式了。我們需要對應用程式代理(app delegate)進行少量的修改,進而使得我們的應用可以接受到推送通知。步驟如下:
1.注冊裝置需要在app delegate的[application:didFinishLaunchingWithOptions:]方法中調用[application registerForRemoteNotificationTypes:]方法,代碼如下:
- - (BOOL)application:(UIApplication *)application
- didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- ...
- // Register for push notifications
- [application registerForRemoteNotificationTypes:
- UIRemoteNotificationTypeBadge |
- UIRemoteNotificationTypeAlert |
- UIRemoteNotificationTypeSound];
- }
2.一旦成功,以上方法會在app delegate中執行回調方法[application:didRegisterForRemoteNotificationsWithDeviceToken:] 。我們需要實作這個方法,用它來告知Parse我們的裝置資訊。代碼如下:
- - (void)application:(UIApplication *)application
- didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken
- [PFPush storeDeviceToken:newDeviceToken]; // Send parse the device token
- // Subscribe this user to the broadcast channel, ""
- [PFPush subscribeToChannelInBackground:@"" block:^(BOOL succeeded, NSError *error) {
- if (succeeded) {
- NSLog(@"Successfully subscribed to the broadcast channel.");
- } else {
- NSLog(@"Failed to subscribe to the broadcast channel.");
- }
- }];
3.廣播頻道(broadcast channel)用于同時聯系到所有使用者,是以很多時候開發者可能需要自己建立一些更精準化的頻道。一旦推送通知被接受但是應用不在前台,就會被顯示在iOS推送中心。反之如果應用剛好處于活動狀态,則交于應用去自行處理。具體我們可以在app delegate中實作[application:didReceiveRemoteNotification]方法。一下示例代碼隻是簡單的将這一需求交由Parse去處理,Parse會建立一個模态警報顯示推送内容。
- didReceiveRemoteNotification:(NSDictionary *)userInfo {
- [PFPush handlePush:userInfo];
好了,現在開始在你的iOS裝置上運作一下,一切順利的話,就可以看到從使用者到推送通知之間的一條模态警報請求許可。
發送推送通知
從Parse website發送
- curl -X POST "https://api.parse.com/1/push" -H "Content-Type: application/json" \
- --data '{"key":"your_push_master_key", "channel":"", "type":"ios",\
- "data":{"alert":"Hello World!"}}'
- // Broadcast "Hello World"
- [PFPush sendPushMessageToChannelInBackground:@"" withMessage:@"Hello World!"];
Write the code ,change the world!