ios 8推送

一直更新了iOS8,但是一直没有开始研究这个iOS8,今天因为项目用到了推送,于是体验了iOS8的推送,先讲讲这个推送。目前分为四个推送:用户推送,本地推送,远程推送,地理位置推送。

推送界面

用户推送

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

注册过程:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
if  (IS_IOS8) {  
         //1.创建消息上面要添加的动作(按钮的形式显示出来)  
         UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];  
         action.identifier = @ "action" ; //按钮的标示  
         action.title=@ "Accept" ; //按钮的标题  
         action.activationMode = UIUserNotificationActivationModeForeground; //当点击的时候启动程序  
         //    action.authenticationRequired = YES;  
         //    action.destructive = YES;  
           
         UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];  
         action2.identifier = @ "action2" ;  
         action2.title=@ "Reject" ;  
         action2.activationMode = UIUserNotificationActivationModeBackground; //当点击的时候不启动程序,在后台处理  
         action.authenticationRequired = YES; //需要解锁才能处理,如果action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;  
         action.destructive = YES;  
           
         //2.创建动作(按钮)的类别集合  
         UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];  
         categorys.identifier = @ "alert" ; //这组动作的唯一标示,推送通知的时候也是根据这个来区分  
         [categorys setActions:@[action,action2] forContext:(UIUserNotificationActionContextMinimal)];  
           
         //3.创建UIUserNotificationSettings,并设置消息的显示类类型  
         UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:[NSSet setWithObjects:categorys, nil nil]];  
         [application registerUserNotificationSettings:notiSettings];  
           
     } else {  
         [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];  
    
     
 
- ( void )application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings  
{  
//    UIUserNotificationSettings *settings = [application currentUserNotificationSettings];  
//    UIUserNotificationType types = [settings types];  
//    //只有5跟7的时候包含了 UIUserNotificationTypeBadge  
//    if (types == 5 || types == 7) {  
//        application.applicationIconBadgeNumber = 0;  
//    }  
     //注册远程通知  
     [application registerForRemoteNotifications];  
}


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

直接在推送消息进行回复


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

  • Actions

  • ?
    1
    2
    3
    4
    5
    6
    UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init];  
    acceptAction.identifier = @ "RickAction" ;  
    acceptAction.title = @ "Accept" ;  
    acceptAction.activationMode = UIUserNotificationActivationModeBackground;  
    acceptAction.destructive = NO;  
    acceptAction.authenticationRequired = NO;
  • Categories

  • ?
    1
    2
    3
    UIMutableUserNotificationCategory *inviteCategory = [[UIMutableUserNotificationCategory alloc] init];  
    inviteCategory.identifier = @ "INVITE_CATEGORY" ;  
    [inviteCategory setActions:@[acceptAction] forContext:UIUserNotificationActionContextDefault];

  • Maybe和Accept

    我们需要注意这个UIUserNotificationActionContextDefault,如果我们使用这个,我们会得到这个推送行为,Maybe和Accept

    我们还可以使用UIUserNotificationActionContextMinimal得到的是Decline和Accept行为

    Decline和Accept

  • Settings

    在这些行为注册之后,我们加上之前提到的推送设置就完成了注册推送的这个流程了

?
1
2
3
4
NSSet *categories = [NSSet setWithObjects:inviteCategory, nil nil];  
UIUserNotificationType  types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert ;  
UIUserNotificationSettings  *mySettings  = [UIUserNotificationSettings settingsForTypes:types categories:categories];  
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];

远程推送

远程推送,所有消息大小不超过2KB,我们获取远程推送的json格式的消息,解析这个消息就是我们的远程推送了:

?
1
2
3
4
5
6
7
8
{  
     “aps”: {  
         "content-available" : 1,  
         "alert" "This is the alert text" ,  
         "badge" : 1,  
         "sound" "default"  
     }  
}

若要使用远程推送,满足两个条件:一、用户需要调用注册用户推送registerUserNotificationSettings;二、在info.plist文件中UIBackgroundModes必须包含远程通知。

?
1
2
3
4
5
6
7
8
9
10
11
12
[[UIApplication sharedApplication] registerForRemoteNotifications];
 
- ( void )application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {  
     NSString *token=[NSString stringWithFormat:@ "%@" ,deviceToken];  
     token=[token stringByReplacingOccurrencesOfString:@ "<"  withString:@ "" ];  
     token=[token stringByReplacingOccurrencesOfString:@ ">"  withString:@ "" ];  
     token=[token stringByReplacingOccurrencesOfString:@ " "  withString:@ "" ];  
}
 
- ( void )application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {  
      
}

iOS7通知代理方法

iOS6的通知代理方法

后来又增加了本地通知的代理方法

添加本地推送的通知代理方法

iOS8的推送代理方法只有两个了

iOS 8推送的通知代理方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- ( void )application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:( void  (^)())completionHandler  
{  
}  
   
- ( void )application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:( void  (^)())completionHandler  
{  
}  
   
- ( void )application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:( void  (^)())completionHandler  
{  
     if  ([identifier isEqualToString:@ "RickAction" ]) {  
         [self handleAcceptActionWithNotification:notification];  
     }  
     completionHandler();  
}  
   
- ( void )handleAcceptActionWithNotification:(UILocalNotification*)notification  
{  
}

地理位置推送

这个推送是新的API才有的特性,必须配合CLLocation定位一起使用。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//Location Notification  
     CLLocationManager *locMan = [[CLLocationManager alloc] init];  
     locMan.delegate = self;  
     [locMan requestWhenInUseAuthorization];  
   
#pragma mark - CLLocationManager  
   
- ( void )locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status  
   
{  
     BOOL  canUseLocationNotifications = (status == kCLAuthorizationStatusAuthorizedWhenInUse);  
     if  (canUseLocationNotifications) {  
         [self startShowLocationNotification];  
     }  
}  
- ( void )application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification  
   
{  
     CLRegion *region = notification.region;  
     if  (region) {  
     }  
}  
   
- ( void )startShowLocationNotification  
   
{  
     CLLocationCoordinate2D local2D ;  
     local2D.latitude = 123.0;  
     local2D.longitude = 223.0;  
     UILocalNotification *locNotification = [[UILocalNotification alloc] init];  
     locNotification.alertBody = @ "你接收到了" ;  
     locNotification.regionTriggersOnce = YES;  
     locNotification.region = [[CLCircularRegion alloc] initWithCenter:local2D radius:45 identifier:@ "local-identity" ];  
     [[UIApplication sharedApplication] scheduleLocalNotification:locNotification];  
}

如果没有开启Core Location 那么上面的didReceiveLocalNotification不会被调用

最后再总结一下,整个推送流程我觉得是这样子的,先注册推送,然后推送消息,客户端接收推送消息,执行推送行为。如果有错误,还请在文章下面评论,欢迎指正。

推送的流程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值