zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    几种滑动验证码处理
    面试题 四 redis线上为什么不能使用 keys *命令
    面试题 六 squid 的理解
    从XP到WIN10,各个系统版本自带 .NET版本整理
    SQL压缩日志
    sql server 使用链接服务器远程查询
    FastReport几个问题
    .Net 三款工作流引擎比较:WWF、netBPM 和 ccflow
    ClientDataSet控件ApplyUpdates的异常触发
    Delphi中关于字符串截取详解
  • 原文地址:https://www.cnblogs.com/leotangcn/p/4992252.html
Copyright © 2011-2022 走看看