【记录】iOS10 点击推送栏的问题

之前做的一个用户点击 推送栏然后处理相应事件是在这里面处理的

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

在里面判断是否是后台然后做相应处理,在ios10以下都没什么问题
到10的时候出问题了,点击通知栏的时候不再走这个代理函数了,
反而走了iOS6以下会走的一个代理方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo        //iOS10已经废弃

这是返璞归真了?



原因是iOS10 的新特性

在iOS10下这么处理

#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif

需要添加新的UserNotifications框架
初始化

 if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) // iOS10
    {
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
        JPUSHRegisterEntity *entity = [[JPUSHRegisterEntity alloc] init];
        entity.types = (UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound);
        [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
#endif
    }

    //获取registration id
    [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {
        if(resCode == 0) {
            NSLog(@"registrationID:%@",registrationID);
        } else {
            NSLog(@"registrationID获取失败,code:%d",resCode);
        }
    }];

iOS 10的处理回调结果

#pragma mark - 处理推送消息  iOS 10
// iOS 10 Support 前台处理逻辑
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
    NSDictionary *userInfo = notification.request.content.userInfo;
    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
    }
//    completionHandler(UNNotificationPresentationOptionAlert); // 这个选择是否在前台进行提醒,声音,alert.还有角标.

    NSDictionary *aps = userInfo[@"aps"];
    NSString *message = aps[@"alert"];
    NSLog(@"message = %@", message);
}
// iOS 10 Support 后台处理逻辑
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
    NSDictionary *userInfo = response.notification.request.content.userInfo;
    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
    }
    completionHandler();  // 系统要求执行这个方法

    NSDictionary *aps = userInfo[@"aps"];
    NSString *message = aps[@"alert"];
    NSLog(@"message = %@", message);
    }
}
时间: 2024-12-09 12:32:51

【记录】iOS10 点击推送栏的问题的相关文章

iOS开发——iOS10升级极光推送SDK、友盟分享SDK

前不久升级了Xcode8 ,同时iOS10系统也推送久. 由于公司需要适配iOS 10系统,同时第三方sdk建议升级. 包含替换升级新的SDK和相应的代码修改. 主要分享如何升级极光推送SDK,友盟分享SDK和升级过程中的遇到的报错 一. 升级极光推送SDK,有一篇不错的博客,代码变更也写的挺详细就不在多写, 遇到的编译报错见第三部分 http://blog.csdn.net/cloud_pro/article/details/52574637 二. 升级友盟分享SDK到目前最新版5.2.1(升

iOS 关于信鸽推送点击推送通知的处理

最近的项目中使用了推送模块,使用的是企鹅帝国的信鸽推送服务,关于具体怎么推送的,证书如何设置,我不再赘述,一来开发文档中已经讲的非常清楚,二来在网上一搜的话也能搜到一大堆:在这里主要写下关于推送的通知来了之后点击此通知该如何处理,也是对自己做完之后做一个笔记 在这里我项目中所要达到的效果是点击通知栏的推送消息,就进入应用中的相应页:默认的效果是点击推送消息,会直接进入应用,如果应用未启动,则会启动应用进入首页:如果应用已启动,只是点击home退入后台的话,则会返回应用,并且应用之前在哪一个界面,

点击推送消息跳转处理(iOS)

当用户点击收到的推送消息时候,我希望打开APP,并且跳转到对应的界面,这就需要在AppDelegate里面对代理方法进行处理. 当用户点击推送消息打开APP的时候会调用 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions launchOptions中会有推送消息的userInfo信息,此时我们可以通过 NSDictionary* rem

iOS用户点击推送消息进入应用后自动跳转到对应的ViewController

当iOS用户通过点击推送消息进入应用时,在AppDelegate的 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 我们可以通过 NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotific

点击推送,跳转到查看推送消息的页面

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ <br> <br>   if(launchOptions) <br> <br>    { <br> <br>        [[UIApplication sharedApplication] setApplicati

iOS App Launch Option(附点击推送操作)

launchOptions中的可能键值见UIApplication Class Reference的Launch Options Keys节 . 若用户直接启动,lauchOptions内无数据; 若由其他应用程序通过openURL:启动,则UIApplicationLaunchOptionsURLKey对应的对象为启动URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey对应启动的源应用程序的bundle ID (NSString):

记录 点击推送进入app 直接进入某个页面

在appdelegate中判断是否是从推送进入的app 如果是就把消息的内容用 NSNotification注册一个通知 然后去首页 接收这个通知判断消息内容 并且跳转到该页面 曾经难住的是在首页有一个跳转延时 导致的跳转不过去 如果不成功就加一个延迟让通知延迟0.5秒左右接收 时间看实际情况 恩就先这样吧 由于也得时间有点久了之前只是测试用来着后来功能干掉了 代码就删掉了 不知道是不是这个先贴出来再说 - (void)application:(UIApplication*)applicatio

iOS极光推送 点击推送消息跳转页面

文章来自:http://www.jianshu.com/p/eaf07c4372a8 AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1 if ([[UIDevice currentDevice].s

Android开发记录18-集成极光推送的一点说明

Android开发记录18-集成推送服务的一点说明 关于推送服务,国内有很多选择,笔者也对它们进行了一个详细的对比,一般我们产品选择推送服务主要考量以下几个要素: 1.是否收费,如何收费? 2.推送内容是是什么(是否包含通知.消息.富媒体等等) 3.稳定性.及时性如何? 4.集成难度是否简单 5.支持平台有哪些(主流Android.IOS) 6.服务端支持语言(Java.C#.PHP.Python等) 下面笔者例举国内主要的一些推送服务: 来自Devstore的统计,共收录了国内21家推送服务,