iOS開發,推送消息 steps

概述:推送過程簡介服務器

1、App啓動過程當中,使用UIApplication::registerForRemoteNotificationTypes函數與蘋果的APNS服務器通訊,發出註冊遠程推送的申請。若註冊成功,回調函數application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 會被觸發,App能夠獲得deviceToken,該token就是一個與設備相關的字符串.
2、App獲取到DeviceToken後,將DeviceToken發送給本身的服務端。
3、服務端拿到DeviceToken之後,使用證書文件,向蘋果的APNS服務器發起一個SSL鏈接。鏈接成功以後,發送一段JSON串,該JSON串包含推送消息的類型及內容。
4、蘋果的APNS服務器獲得JSON串之後,向App發送通知消息,使得App的回調函數application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo被調用,App從userInfo中便可獲得推送消息的內容。app

 

一、前期準備函數

在學習推送開發以前,開發者須要兩樣東西,(1)、iPhone真機,由於模擬器不支持推送(2)、付費的開發者帳號。學習

二、新建項目,選擇Single View Application模板。spa

三、註冊通知(Registration Notification)操作系統

(1)在AppDelegate文件的application:didFinishLaunchingWithOptions:方法中添加「註冊推送」的代碼。.net

?
1
2
3
4
5
6
7
8
9
10
- ( BOOL )application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     // Register for Remote Notifications
     if  (iOS8_OR_LATER) {
         [[UIApplication sharedApplication] registerForRemoteNotifications];
         UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];
         [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
     else  {
         [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];
     }
}

 

這樣iOS操做系統就知道該應用程序將須要處理推送消息方面的內容。code

經過上面的代碼,iOS操做系統與蘋果的APNS服務器聯繫,而且得到一個device token,這個device token用於區別運行該App的每個硬件設備。這個device token是用於你本身的服務器給該設備發送推送信息,具體的實現方式就是你的服務器將device token以及須要推送的信息打包發送給蘋果的服務器,而後蘋果的APNS服務器負責將推送的內容分發到對應的設備。blog

須要瞭解的是device token在每個App上面都不同,而且在同一個App上面會由於時間改變而不一樣。因此蘋果推薦在每一次App啓動的時候將device token發送到你的服務器後臺,以確保device token是最新的。token

四、判斷註冊通知失敗仍是成功

?
1
2
3
4
5
6
7
8
- ( void )application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
     NSLog(@ "Did Register for Remote Notifications with Device Token (%@)" , deviceToken);
}
- ( void )application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
     NSLog(@ "Did Fail to Register for Remote Notifications" );
     NSLog(@ "%@, %@" , error, error.localizedDescription);
     
}

 

五、收到通知消息,進行消息處理

若是收到了通知事件,那麼UIApplicationDelegate接口中的application:didReceiveRemoteNotification將會執行,你能夠在這裏獲取推送的信息,而後作出相應的處理。

?
1
2
3
4
5
6
7
8
- ( void )application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
     NSString *deviceTokenStr = [[[[deviceToken description]
                                   stringByReplacingOccurrencesOfString: @ "<"  withString: @ "" ]
                                  stringByReplacingOccurrencesOfString: @ ">"  withString: @ "" ]
                                 stringByReplacingOccurrencesOfString: @ " "  withString: @ "" ];
     NSLog(@ "去除device token中的空格和<>字符:%@" ,deviceTokenStr); //僅僅是我參與的項目中這樣處理,見仁見智
}

 

六、製做證書,使用真機進行推送消息開發

這時候若是運行項目,那麼application:didFailToRegisterForRemoteNotificationsWithError將會執行,由於模擬器不支持推送,須要製做證書,使用真機作推送開發。

七、SSL Certificate證書製做

在蘋果的開發者中心,建立App Id

推送的證書必須使用精確(Explicit)的App ID,而不能使用模糊(Wildcard) App ID。

以下圖所示,

勾選上Push Notifications服務,以下圖所示,

而後按照建立證書的流程,使用建立的App ID,由於須要截圖較多,此處再也不贅述。

相關文章
相關標籤/搜索