iOS10的推送处理

新版iOS10更新后, 通知的处理发生里很大变化, 本人也刚刚处理完成这一方面的问题, 写出来希望帮助更多的人, 项目中用的是极光推送的最新版.

极光的配置

#pragma mark - 极光推送
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
    entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
#endif
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        //可以添加自定义categories
        [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                          UIUserNotificationTypeSound |
                                                          UIUserNotificationTypeAlert)
                                              categories:nil];
    } else {
        //categories 必须为nil
        [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                          UIRemoteNotificationTypeSound |
                                                          UIRemoteNotificationTypeAlert)
                                              categories:nil];
    }
    [JPUSHService setupWithOption:launchOptions appKey:JPushSpKey
                          channel:@"Publish channel"
                 apsForProduction:YES
            advertisingIdentifier:nil];

在极光2.1.9版本以后可实现SDK封装的JPUSHRegisterDelegate协议方法,适配iOS10新增的delegate协议方法。
即以下两个方法:

#pragma mark - 极光推送 to iOS7-9
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    // IOS 7 Support Required
    [JPUSHService handleRemoteNotification:userInfo];
    if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {
        SPLog(@"iOS7-9 前台收到通知");
    }else if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
        SPLog(@"iOS7-9 离线收到通知");
    }else if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
        SPLog(@"iOS7-9 后台收到通知");
    }
    completionHandler(UIBackgroundFetchResultNewData);
}

#pragma mark- JPUSHRegisterDelegate
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
//应用处于前台
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
    NSDictionary * userInfo = notification.request.content.userInfo;
    UNNotificationRequest *request = notification.request; // 收到推送的请求
    UNNotificationContent *content = request.content;      // 收到推送的消息内容
    NSNumber *badge = content.badge;                       // 推送消息的角标
    NSString *body = content.body;                         // 推送消息体
    UNNotificationSound *sound = content.sound;            // 推送消息的声音
    NSString *subtitle = content.subtitle;                 // 推送消息的副标题
    NSString *title = content.title;                       // 推送消息的标题
    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
        [self analysisUserInfoWithDict:userInfo];
        SPLog(@"iOS10 前台收到远程通知");
    }else{
        SPLog(@"iOS10 前台收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo);
        SPLog(@"iOS10 前台收到本地通知");
    }
    //需要执行这个方法,选择是否提醒用户.有Badge、Sound、Alert三种类型可以设置
    completionHandler(UNNotificationPresentationOptionBadge|
                      UNNotificationPresentationOptionSound|
                      UNNotificationPresentationOptionAlert);
}
//应用未启动
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
    NSDictionary * userInfo = response.notification.request.content.userInfo;
    UNNotificationRequest *request = response.notification.request; // 收到推送的请求
    UNNotificationContent *content = request.content;               // 收到推送的消息内容
    NSNumber *badge = content.badge;                                // 推送消息的角标
    NSString *body = content.body;                                  // 推送消息体
    UNNotificationSound *sound = content.sound;                     // 推送消息的声音
    NSString *subtitle = content.subtitle;                          // 推送消息的副标题
    NSString *title = content.title;                                // 推送消息的标题
    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
        [self analysisUserInfoWithDict:userInfo];
        SPLog(@"iOS10 离线收到远程通知");
    }else{
        SPLog(@"iOS10 收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo);
        SPLog(@"iOS10 离线收到本地通知");
    }
    completionHandler();  // 系统要求执行这个方法
}
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值