一、訊息推送原理:
在實現訊息推送之前先提及幾個於推送相關概念,如:
1、 Provider:就是為指定IOS裝置應用程式提供Push的伺服器,(如果IOS裝置的應用程式是用戶端的話,那麼Provider可以理解為服務端[訊息的發起者]);
2、 APNS:Apple Push Notification Service[蘋果訊息推送伺服器];
3、 iPhone:用來接收APNS下發下來的訊息;
4、 Client App:IOS裝置上的應用程式,用來接收iphone傳遞APNS下發的訊息到制定的一個用戶端 app[訊息的最終響應者];
可以分為三個階段:
階段一:Provider[服務端]把要發送的訊息,目的IOS裝置標識打包,發送給APNS;
階段二:APNS在自身的登入Push服務的IOS裝置列表中,尋找有相應標識的IOS裝置,並將訊息發送到IOS裝置;
階段三:IOS裝置把發送的訊息傳遞給對應的應用程式,並且按照設定彈出Push通知。
具體過程,如:
1、 [Client App]註冊訊息推送;
2、 [Client App]跟[APNS Service]要deviceToken, Client App接收deviceToken;
3、 [Client App]將deviceToken發送給[Provider]Push服務端程式;
4、 當Push服務端程式滿足發送訊息條件了,[Provider]向[APNS Service]發送訊息;
5、 [APNS Service]將訊息發送給[Client App].
二、訊息推送實現:
1、 產生*.certSigningRequest檔案,步驟如下:
[MacBookà應用程式à工具 + 生產力à鑰匙串訪問à認證助手à從認證機構求認證?à認證資訊(使用者電子郵箱地址{填寫您的郵箱,如:your@email.com},常用名稱{任意,如:PushDemo},請求是:{單選,選擇‘儲存到磁碟’})à繼續à儲存],這時會在您指定的地方產生你指定的檔案,預設為CertificateSigningRequest.certSigningRequest檔案,這裡命名為:PushDemo.certSigningRequest.在此*.certSigningRequest已經產生,具體操作步驟如下面兩張圖所示。
如果產生成功,則會在[鑰匙串訪問|登入|密鑰]欄目中列出與*.certSigningRequest關聯的密鑰,這裡是PushDemo,如所示:
2、 建立一個App ID(在蘋果開發人員帳號中配置)
(1) 登入iOS Dev Center,登入成功後,點擊(iOS Provisioning Portal對應連結),如所示:
(2) 建立New App ID[App IDsàManageàNew App ID]( Description{填寫您對此App ID 的描述,如:iShop},Bundle Seed ID(App ID Prefix){選擇綁定App ID首碼,如:預設選擇Generate New},Bundle Identifier(App ID Suffix){填寫綁定App ID尾碼,如:com.yourcorp.iShop}),如所示:
這樣就會產生下面這條記錄,如所示:
(3) 配置上一步中產生的App ID,讓其支援訊息推送[點擊2-6中的Configureà選中Enable for Apple Push Notification serviceà點擊Configure],如所示:
(4) Generate a Certificate Signing Request(產生部署請求認證)[點擊中的2ConfigureàContinueà步驟1產生的*certSigningRequest檔案(這裡是iShop. certSigningRequest)à Generateà產生完成後將其下載下來,命名為:aps_developer_identity.cer],雙擊aps_developer_identity.cer認證{將認證與密鑰關聯,並將認證匯入到MacBook中},如所示:
(5) 建立Development Provisioning Profiles[開發許可設定檔](Provisioning| Development|New Profile),具體操作流程如所示:
點擊中Submit,產生Development Provisioning Profiles[開發許可設定檔],這裡是:iShopDevprofile.mobileprovision如所示:
下載此開發許可認證(用於聯機調試)。
總結,到現在為止,我們已經產生:A:*.certSigningRequest檔案(在步驟(4)中使用,用於產生認證B)、B: aps_developer_identity.cer認證(在Provider[Push伺服器]服務端應用使用)、C:*..mobileprovision開發許可設定檔(在Client App用戶端應用聯機調試使用)。
至此,訊息推送的配置已經全部完成,接下來的工作就是編寫Provider[Push伺服器]服務端應用和Client App用戶端應用的程式。
三、Provider服務端的實現
在這裡只是簡單講述Provider服務端(JAVA實現)步驟如下:
(1) 製作Provider服務端所需要的*.p12檔案:
在上面的實現的(4) 部分的圖所展示的密鑰、認證,我們並沒有使用到它,那麼為什麼要展示出來呢,猜猜是為什嗎?為製作*.p12檔案?哈哈,您猜對了,下面我們就利用它來製作*.p12檔案,步驟:([MacBookà應用程式à工具 + 生產力à鑰匙串訪問[鑰匙串:登入,種類:認證]à選擇剛剛產生的認證(Apple Development IOS Services:*******)à菜單à檔案à匯出項目…à[儲存為:任意檔案名稱(如:iPush),檔案格式:預設(個人資訊交換(.p12))]à輸入密碼以進行匯出[密碼:任意,驗證:與密碼同一]à輸入MACBook登入密碼à允許à最終產生。
關鍵步驟如:
(2) 編寫Client App用戶端的關鍵代碼,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
applicationUIApplicationapplication didFinishLaunchingWithOptionslaunchOptions
self.window UIWindow alloc initWithFrameUIScreen mainScreenbounds autorelease; self.window.backgroundColor UIColor whiteColor; self.window makeKeyAndVisible; UIRemoteNotificationType types UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert; UIApplication sharedApplicationregisterForRemoteNotificationTypestypes; ;
applicationUIApplicationapplication didRegisterForRemoteNotificationsWithDeviceTokendeviceToken
NSLog,deviceToken;
applicationUIApplicationapplication didFailToRegisterForRemoteNotificationsWithErrorerror
NSLog,errorlocalizedDescription;
applicationUIApplicationapplication didReceiveRemoteNotificationuserInfo
NSLog,userInfo; UIAlertView alert UIAlertView alloc initWithTitle message delegate cancelButtonTitle otherButtonTitles; alert show; alert release;
|
(3)編寫Provider服務端關鍵代碼,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
MainSend
main args deviceToken .. deviceToken PayLoad payLoad PayLoad payLoad. payLoad. payLoad. PushNotificationManager pushManager PushNotificationManager. pushManager., deviceToken host port path certificatePath path certificatePassword pushManager.host, port, certificatePath, certificatePassword, SSLConnectionHelper. Device client pushManager. pushManager.client, payLoad pushManager. pushManager. .. ex ex.
|
注意:如果Provider服務端為Objective-C實現的話,就不需要*.p12認證。