美文网首页
iOS10的推送处理

iOS10的推送处理

作者: Ape_HC | 来源:发表于2016-10-14 16:53 被阅读89次

    新版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
    

    相关文章

      网友评论

          本文标题:iOS10的推送处理

          本文链接:https://www.haomeiwen.com/subject/dntnyttx.html