iOS开发——远程通知,远程推送(RemoteNotification)

  iOS中的远程通知,也叫远程推送,使用频率非常频繁,它主要是通过苹果apns服务器主动发起找到被推送的设备,把信息传达给用户,如果对应程序没有正在运行,那么远程通知就会先到通知中心,展示在通知栏上面,这里记录下我使用远程通知的几个步骤。

一、创建推送证书。

  推送证书的创建非常简单,跟创建开发证书类似。

  1. 创建APP ID,勾选Explicit App ID也就是明确的ID,这样才能勾选使用下面的Push Notification。

  

  然后直接一路到complete即可。

  2. 创建推送证书,推送证书有两种,一种是开发环境(Sandbox),一种是生产环境(Production),两种证书对应APP不同的运行状态,这里我们测试使用Sandbox,下面是创建步骤。

在Development中选择Sandbox,继续下一步。

这里他会主动匹配一个勾选了推送服务的APP ID列表,选中刚才创建的APP ID

这里让我们本地创建一个CSR文件来生成我们的证书

创建CSR证书需要进入钥匙串,然后如上图选择

点击继续,然后选择创建的位置就可以得到CSR文件

  CSR文件创建成功后回到证书创建这边来,下一步到这个位置,Choose File选中刚才创建的CSR文件,然后下一步即可创建证书,然后下载点击打开即可。

  这样一个开发环境的推送证书就算是创建完成了。

二、代码处理。

  证书创建完成之后,我们需要去工程AppDelegate.m里面加入注册,处理推送的代码,如下:

  1. didFinishLaunchingWithOptions里面注册远程推送。

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 2     
 3     // 注册通知
 4     [self registerRemoteNotification];
 5     
 6     return YES;
 7 }
 8 
 9 /**
10  *  注册远程通知
11  */
12 - (void)registerRemoteNotification
13 {
14     UIApplication *application = [UIApplication sharedApplication];
15     // iOS8注册APNS
16     if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
17         [application registerForRemoteNotifications];
18         UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
19         UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil];
20         [application registerUserNotificationSettings:settings];
21     }
22     // iOS8之前注册APNS
23     else
24     {
25         UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeBadge |
26         UIRemoteNotificationTypeSound |
27         UIRemoteNotificationTypeAlert;
28         [[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
29     }
30 }

  2. 实现其他一些相关方法。

 1 - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
 2 {
 3     [application registerForRemoteNotifications];
 4 }
 5 
 6 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
 7     
 8     NSLog(@"deviceToken - %@", deviceToken);
 9 }
10 
11 // 看官方的文档的注释,iOS7后实现这个方法后,就可以不用在 didFinishLaunchingWithOptions 和 didReceiveRemoteNotification 里面分别接受推送信息了,这一个方法可以搞定,测试有效。
12 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
13     
14     [self dealRemoteNotificationWithUserInfo:userInfo];
15     completionHandler(UIBackgroundFetchResultNewData);
16 }
17 
18 /**
19  *  处理远程通知
20  *
21  *  @param userInfo 通知内容
22  */
23 - (void)dealRemoteNotificationWithUserInfo:(NSDictionary *)userInfo {
24     
25     UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"收到推送" message:nil preferredStyle:UIAlertControllerStyleAlert];
26     [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]];
27     [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:alert animated:YES completion:nil];
28     NSLog(@"receive remoteNotification - %@", userInfo);
29 }

  以上即是代码需要处理的部分。

三、推送测试。

  推送测试,这里推荐使用PushMeBaby,简单好用,而且全程只需要Xcode,教程在这里:http://www.cnblogs.com/leotangcn/p/4971814.html

 

Demo地址:https://github.com/LeoTangCN/RemoteNotificationDemo

以上即是本次分享,多谢观看!

posted @ 2015-11-26 13:44  开机就蓝屏  阅读(2529)  评论(0编辑  收藏  举报