1.獲得deviceToken
的過程


1>客戶端向蘋果服務APNS,發送設備的UDID和英語的Bundle Identifier.
2>經蘋果服務器加密生成一個deviceToken
3>將當前用戶的deviceToken(用戶標識),發送給自己應用的服務器
4>自己的服務器,將得到的deviceToken,進行保存
2.利用deviceToken
進行數據傳輸,推送通知

5>需要推送的時候,將消息和deviceToken一起發送給APNS,蘋果服務器,再通過deviceToken找到用戶,並將消息發給用戶

這里不再演示關於證書的配置, 簡單的只進行說明步驟:
1> 創建明確的AppID,只有明確的AppID才能進行一些特殊的操作
2>真機調試的APNS SSL證書
3>發布程序的APNS SSL證書
4>生成描述文件
[依次安裝證書, 再裝描述]
注冊遠程推送通知:
1.客戶端如果想要接收APNs的遠程推送通知,必須先進行注冊(得到用戶授權)
一般在APP啟動完畢后就馬上進行注冊
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { // 1.注冊UserNotification,以獲取推送通知的權限 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil]; [application registerUserNotificationSettings:settings]; // 2.注冊遠程推送 [application registerForRemoteNotifications]; } else { [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeNewsstandContentAvailability | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound]; } return YES; }
2.注冊成功后, 調用AppDelegate的方法,獲取到用戶的deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // <32e7cf5f 8af9a8d4 2a3aaa76 7f3e9f8e 1f7ea8ff 39f50a2a e383528d 7ee9a4ea> // <32e7cf5f 8af9a8d4 2a3aaa76 7f3e9f8e 1f7ea8ff 39f50a2a e383528d 7ee9a4ea> NSLog(@"%@", deviceToken.description); }
3.點擊推送通知,和本地一樣有兩種狀況.
1> app沒有關閉,只是一直隱藏在后台
讓app進入前台, 並調用下面的方法(app沒有重新啟動)
過期的方法:
// 當接受到遠程退職時會執行該方法(當進入前台或者應用程序在前台) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"%@", userInfo); UIView *redView = [[UIView alloc] init]; redView.backgroundColor = [UIColor redColor]; redView.frame = CGRectMake(100, 100, 100, 100); [self.window.rootViewController.view addSubview:redView]; }
蘋果系統建議使用下面的方法:
/* 1.開啟后台模式 2.調用completionHandler,告訴系統你現在是否有新的數據更新 3.userInfo添加一個字段:"content-available" : "1" : 只要添加了該字段,接受到通知都會在后台運行 */ - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSLog(@"%@", userInfo); UIView *redView = [[UIView alloc] init]; redView.backgroundColor = [UIColor redColor]; redView.frame = CGRectMake(100, 100, 100, 100); [self.window.rootViewController.view addSubview:redView]; completionHandler(UIBackgroundFetchResultNewData); }
2>app已經關閉,需要重新開啟,---基本實現方法和本地通知一樣