首页 > 代码库 > iOS iOS8注册通知

iOS iOS8注册通知

目前分为四个推送:用户推送,本地推送,远程推送,地理位置推送。

推送界面

用户推送

我们先开始讲这个用户推送,我们要使用之前必须先注册这个推送,用户要允许这个程序进行推送

注册过程:


[objc] view plaincopy在CODE上查看代码片派生到我的代码片

  1. if (IS_IOS8) {  

  2.         //1.创建消息上面要添加的动作(按钮的形式显示出来)  

  3.         UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];  

  4.         action.identifier = @"action";//按钮的标示  

  5.         action.title=@"Accept";//按钮的标题  

  6.         action.activationMode = UIUserNotificationActivationModeForeground;//当点击的时候启动程序  

  7.         //    action.authenticationRequired = YES;  

  8.         //    action.destructive = YES;  

  9.           

  10.         UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];  

  11.         action2.identifier = @"action2";  

  12.         action2.title=@"Reject";  

  13.         action2.activationMode = UIUserNotificationActivationModeBackground;//当点击的时候不启动程序,在后台处理  

  14.         action.authenticationRequired = YES;//需要解锁才能处理,如果action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;  

  15.         action.destructive = YES;  

  16.           

  17.         //2.创建动作(按钮)的类别集合  

  18.         UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];  

  19.         categorys.identifier = @"alert";//这组动作的唯一标示,推送通知的时候也是根据这个来区分  

  20.         [categorys setActions:@[action,action2] forContext:(UIUserNotificationActionContextMinimal)];  

  21.           

  22.         //3.创建UIUserNotificationSettings,并设置消息的显示类类型  

  23.         UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:[NSSet setWithObjects:categorys, nil nil]];  

  24.         [application registerUserNotificationSettings:notiSettings];  

  25.           

  26.     }else{  

  27.         [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];  

  28.     }  





[objc] view plaincopy在CODE上查看代码片派生到我的代码片

  1. - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings  

  2. {  

  3. //    UIUserNotificationSettings *settings = [application currentUserNotificationSettings];  

  4. //    UIUserNotificationType types = [settings types];  

  5. //    //只有5跟7的时候包含了 UIUserNotificationTypeBadge  

  6. //    if (types == 5 || types == 7) {  

  7. //        application.applicationIconBadgeNumber = 0;  

  8. //    }  

  9.     //注册远程通知  

  10.     [application registerForRemoteNotifications];  

  11. }  



我们现在仅仅是注册了通知的设置,还要注册推送通知的行为,在iOS8中,行为能直接在推送消息进行,如回复消息,拒绝消息等总结就是三个方法进行注册

直接在推送消息进行回复


我们如何能进行这些行为,首先我们需注册这些行为。

  • Actions


    [objc] view plaincopy在CODE上查看代码片派生到我的代码片


  1. UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init];  

  2. acceptAction.identifier = @"RickAction";  

  3. acceptAction.title = @"Accept";  

  4. acceptAction.activationMode = UIUserNotificationActivationModeBackground;  

  5. acceptAction.destructive = NO;  

  6. acceptAction.authenticationRequired = NO;  

Categories[objc] view plaincopy我们需要注意这个UIUserNotificationActionContextDefault,如果我们使用这个,我们会得到这个推送行为,Maybe和Accept我们还可以使用UIUserNotificationActionContextMinimal得到的是Decline和Accept行为
  1. UIMutableUserNotificationCategory *inviteCategory = [[UIMutableUserNotificationCategory alloc] init];  

  2. inviteCategory.identifier = @"INVITE_CATEGORY";  

  3. [inviteCategory setActions:@[acceptAction] forContext:UIUserNotificationActionContextDefault];  

Settings在这些行为注册之后,我们加上之前提到的推送设置就完成了注册推送的这个流程了[objc] view plaincopy远程推送远程推送,所有消息大小不超过2KB,我们获取远程推送的json格式的消息,解析这个消息就是我们的远程推送了:[html] view plaincopy若要使用远程推送,满足两个条件:一、用户需要调用注册用户推送registerUserNotificationSettings;二、在info.plist文件中UIBackgroundModes必须包含远程通知。[objc] view plaincopy[objc] view plaincopy[objc] view plaincopyiOS7通知代理方法后来又增加了本地通知的代理方法iOS8的推送代理方法只有两个了[objc] view plaincopy地理位置推送这个推送是新的API才有的特性,必须配合CLLocation定位一起使用。[objc] view plaincopy如果没有开启Core Location 那么上面的didReceiveLocalNotification不会被调用最后再总结一下,整个推送流程我觉得是这样子的,先注册推送,然后推送消息,客户端接收推送消息,执行推送行为。如果有错误,还请在文章下面评论,欢迎指正。
  1. //Location Notification  

  2.     CLLocationManager *locMan = [[CLLocationManager alloc] init];  

  3.     locMan.delegate = self;  

  4.     [locMan requestWhenInUseAuthorization];  

  5.   

  6. #pragma mark - CLLocationManager  

  7.   

  8. - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status  

  9.   

  10. {  

  11.     BOOL canUseLocationNotifications = (status == kCLAuthorizationStatusAuthorizedWhenInUse);  

  12.     if (canUseLocationNotifications) {  

  13.         [self startShowLocationNotification];  

  14.     }  

  15. }  

  16. - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification  

  17.   

  18. {  

  19.     CLRegion *region = notification.region;  

  20.     if (region) {  

  21.     }  

  22. }  

  23.   

  24. - (void)startShowLocationNotification  

  25.   

  26. {  

  27.     CLLocationCoordinate2D local2D ;  

  28.     local2D.latitude = 123.0;  

  29.     local2D.longitude = 223.0;  

  30.     UILocalNotification *locNotification = [[UILocalNotification alloc] init];  

  31.     locNotification.alertBody = @"你接收到了";  

  32.     locNotification.regionTriggersOnce = YES;  

  33.     locNotification.region = [[CLCircularRegion alloc] initWithCenter:local2D radius:45 identifier:@"local-identity"];  

  34.     [[UIApplication sharedApplication] scheduleLocalNotification:locNotification];  

  35. }  

  1. - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler  

  2. {  

  3. }  

  4.   

  5. - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler  

  6. {  

  7. }  

  8.   

  9. - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler  

  10. {  

  11.     if ([identifier isEqualToString:@"RickAction"]) {  

  12.         [self handleAcceptActionWithNotification:notification];  

  13.     }  

  14.     completionHandler();  

  15. }  

  16.   

  17. - (void)handleAcceptActionWithNotification:(UILocalNotification*)notification  

  18. {  

  19. }  

  1. - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {  

  2.      

  3. }  

  1. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {  

  2.     NSString *token=[NSString stringWithFormat:@"%@",deviceToken];  

  3.     token=[token stringByReplacingOccurrencesOfString:@"<" withString:@""];  

  4.     token=[token stringByReplacingOccurrencesOfString:@">" withString:@""];  

  5.     token=[token stringByReplacingOccurrencesOfString:@" " withString:@""];  

  6.       

  7. }  

  1. <span style="font-family: Helvetica, Arial, Geneva, sans-serif;">[[UIApplication sharedApplication] registerForRemoteNotifications];</span>  

  1. {  

  2.     “aps”: {  

  3.         "content-available": 1,  

  4.         "alert": "This is the alert text",  

  5.         "badge": 1,  

  6.         "sound": "default"  

  7.     }  

  8. }  

  1. NSSet *categories = [NSSet setWithObjects:inviteCategory, nil nil];  

  2. UIUserNotificationType  types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert ;  

  3. UIUserNotificationSettings  *mySettings  = [UIUserNotificationSettings settingsForTypes:types categories:categories];  

  4. [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];  


本文出自 “周卫斌” 博客,请务必保留此出处http://wilbinchou.blog.51cto.com/9420747/1562392

iOS iOS8注册通知