美文网首页
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推送必看UNNotificationContentEx

    iOS10推送必看UNNotificationContentExtension iOS10推送必看UNNotifi...

  • iOS10推送必看UNNotificationServiceEx

    iOS10推送必看UNNotificationServiceExtension iOS10推送必看UNNotifi...

  • iOS10的推送处理

    新版iOS10更新后, 通知的处理发生里很大变化, 本人也刚刚处理完成这一方面的问题, 写出来希望帮助更多的人, ...

  • iOS10推送开发

    iOS10推送授权 UNNotificationSettings属性 iOS10本地推送示例 定义推送 以上就是一...

  • iOS 推送总结

    注册推送 收到推送 iOS10以前 iOS10之后 关于推送的声音播放 苹果默认的推送声音就不说了,需要播放自定义...

  • 友盟推送坑点(测试生产环境推送)

    背景:iOS10升级后,系统xcode未升级,集成时没有集成iOS10的推送导致演示项目iOS10无法收到推送 1...

  • iOS10推送通知整理总结

    这篇文章整理iOS10之后的推送通知(文中的推送通知,如不做特殊说明,默认是iOS10以后的推送通知) iOS10...

  • iOS推送通知学习与总结

    这篇文章整理iOS10之前的推送通知(文中的推送通知,如不做特殊说明,默认是iOS10以前的推送通知) iOS10...

  • iOS消息推送

    推送的注册: 方法回调 iOS10及以上方法回调 iOS10以下: 推送的Extension 分为service和...

  • 本地推送的相关知识点

    本地推送 iOS10 在iOS10 中,推送授权方法做了很大改变,下面是授权和注册方法,要使用本地推送,首先要进行...

网友评论

      本文标题:iOS10的推送处理

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