iOS開發,推送消息 steps

概述:推送過程簡介
ios

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模板。學習

三、註冊通知(Registration Notification)spa

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

- (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服務器負責將推送的內容分發到對應的設備。token

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

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

- (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將會執行,你能夠在這裏獲取推送的信息,而後作出相應的處理。

- (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,由於須要截圖較多,此處再也不贅述。

原文連接:http://code.tutsplus.com/tutorials/setting-up-push-notifications-on-ios--cms-21925

相關文章
相關標籤/搜索