iOS基于JPush点击通知跳转到对应的界面 (1 手机系统版本 2 程序在前台 后台 死掉)

原创 2016年11月23日 10:05:04
 在做项目时遇到了这个问题,相信跟大家一样,不是不会做,但是就是不是很会做,然后就百度,后来发现没有适合我的。于是综合手机系统版本和程序的生命周期进行叙述。
 前面证书的流程忽略,如果不会百度一大堆。
 1.注册通知:
 //根据系统分:
 if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
        JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
        entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
        [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];

    }else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                          UIUserNotificationTypeSound |
                                                          UIUserNotificationTypeAlert)
                                              categories:nil];

    }else {
        [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                          UIRemoteNotificationTypeSound |
                                                          UIRemoteNotificationTypeAlert)
                                              categories:nil];
    }

    [JPUSHService setupWithOption:launchOptions appKey:@"app在JPUSH上的key"
                          channel:@"AppStore"
                 apsForProduction:YES
            advertisingIdentifier:advertisingId];

你想在程序中 点击通知栏通知也可以跳转等都可以实现
1、程序被杀死

(1)ios10 以上:

//(JPush对系统的方法进行了封装  改名为下面的):
//The method will be called on the delegate when the user responded to the notification by opening the application, dismissing the notification or choosing a UNNotificationAction. The delegate must be set before the application returns from applicationDidFinishLaunching:.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler;

//以下方法:
- (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];
        /// 跳转界面
        [self _pushViewControllerWithRemoteNotification:userInfo];

    }else{
        //前台运行时收到推送 转的本地通知,如果没有查看,而是退到后台 或杀死程序,点击了推送到前台push处理==============
        //前台运行时 转的本地通知 直接点击也走这个方法
        //[self _pushViewControllerWithRemoteNotification:userInfo];

    }
    completionHandler();  // 系统要求执行这个方法
}

(2)iOS10 一下:

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

    [JPUSHService handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);

   if (application.applicationState == UIApplicationStateActive) {

         [JPUSHService setBadge:0];
         //在前台时  这里可以给出提示  看用户要不要跳转

     }else if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive){

         [JPUSHService handleRemoteNotification:userInfo];
         /// 处理远程推送的跳转
         [self _pushViewControllerWithRemoteNotification:userInfo];

     }

2、程序在后台
(1)iOS 10 以上
还是会执行上面 1、程序被杀死的- (void)jpushNotificationCenter:(UNUserNotificationCenter )center didReceiveNotificationResponse:(UNNotificationResponse )response withCompletionHandler:(void (^)())completionHandler ;方法

(2)iOS10 以下
还是会执行上面 1、程序被杀死的- (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler;方法

3、程序在前台
(1)iOS10 以上


注意:实现在前台远程通知显示到通知栏: 以下代码中 把(* 统一配对出现实现通知栏显示 **) 对应的两处 注释 打开 就可以实现在前台 弹出通知栏


- (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; // 收到推送的消息内容
//    NSString *title = content.title;  // 推送消息的标题
//    NSString *body = content.body;    // 推送消息体
//    NSNumber *badge = content.badge;  // 推送消息的角标
//    UNNotificationSound *sound = content.sound;  // 推送消息的声音
//    NSString *subtitle = content.subtitle;  // 推送消息的副标题

     //这个方法 iOS10 以上可以判断,通过把远程通知 装换成本地通知, 然后还可以把本地通知显示在通知栏 (如果不想  以通知栏的形式  可以用提示框)
     ////////  前台   //////////

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        /*  (******   统一配对出现实现通知栏显示    *******)
        //iOS10 前台收到远程通知
        //iOS10处理远程推送
        [JPUSHService handleRemoteNotification:userInfo];
        //前台收到推送的时候 转成本地通知
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        notification.alertTitle = title;
        notification.alertBody = body;
        notification.userInfo = userInfo;
        [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
         */
        [self _operateLocalNotificationByUserInfo:userInfo];

    }else {
        //(******   统一配对出现实现通知栏显示    *******)
        //iOS10处理本地通知 添加到通知栏
        //completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
        // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置

    }


}

(2)iOS10 以下
还是会执行上面 1、程序被杀死的- (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler;方法

总结:根据判断出来的是后台还是前台 能确保iOS10以上或者是以下 风格统一。

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS 远程推送 总结

首先,让我们看看jpush的申请证书以及配置教程http://docs.jpush.io/client/ios_tutorials/#ios-sdk 相关配置完成后,我们就来实现相应的远程推送功能。...
  • agonie201218
  • agonie201218
  • 2016年06月12日 11:40
  • 698

iOS10 极光推送(远程) 小结

主要是针对iOS10不同的地方 1 首先要下载2.1.9以及Xcode8的环境 包地址   点击打开链接 2  配置Xcode8的服务 3  域名配置 3-1局部配置 这个是看极光的文...
  • rpf2014
  • rpf2014
  • 2016年09月21日 14:01
  • 5244

iOS10中的极光推送消息的适配

iOS10发布后,发现项目中的极光推送接收消息异常了。 查了相关资料后才发现,iOS10中对于通知做了不少改变。同时也发现极光也很快更新了对应的SDK。 现在就把适配修改的做法分享一下,希望对有需要的...
  • potato512
  • potato512
  • 2016年09月21日 15:55
  • 6897

极光推送iOS接入代码(含设置别名)

极光推送可复用代码
  • qq_26300747
  • qq_26300747
  • 2017年11月06日 09:59
  • 245

信鸽推送和极光推送的介绍和接入使用,设备推送 和单个账号推送的设置

针对初学者信鸽 和极光推送 可以来此参考一下,
  • IOS_feng
  • IOS_feng
  • 2017年11月06日 11:01
  • 202

iOS10 注册极光推送(干货)

苹果在iOS10上对apns推送做了修改, 极光也是很给力的, 在第一时间就对sdk进行了更新, 下面对iOS10注册极光推送进行一下记录. 首先, 在极光的开发者服务里注册应用获取appKey, 在...
  • Cloud_Pro
  • Cloud_Pro
  • 2016年09月18日 16:16
  • 10300

IOS 极光推送消息

iOS10发布后,发现项目中的极光推送接收消息异常了。 查了相关资料后才发现,iOS10中对于通知做了不少改变。同时也发现极光也很快更新了对应的SDK。 现在就把适配修改的做法分享一下,希...
  • st646889325
  • st646889325
  • 2016年10月13日 10:05
  • 2091

swift3.0 集成极光推送(v2.2)iOS10.0最新写法

// // AppDelegate.swift // 1120-jiguang // // Created by targetcloud on 2016/11/20. // Copyright...
  • callzjy
  • callzjy
  • 2016年11月20日 21:27
  • 3571

极光推送

项目中需要设备报警的推送因此需要极光推送1.注册一个极光的账号2.注册一个APNS推送证书这两步都做过了。因此下载推送证书,双击用钥匙串打开导出 .p12 证书文件 并设置密码第一个选择apns de...
  • github_35041937
  • github_35041937
  • 2017年07月12日 16:32
  • 410

IOS_简单地页面跳转以及NSNotificationCenter(通知中

实现页面1跳转到页面2,页面2填写数据后返回到页面1,页面1的label会显示数据. 首先画界面,上面是Navigation Bar  给页面2设置storyboard id :  针对页面2...
  • heyhey_
  • heyhey_
  • 2015年08月21日 16:36
  • 832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS基于JPush点击通知跳转到对应的界面 (1 手机系统版本 2 程序在前台 后台 死掉)
举报原因:
原因补充:

(最多只允许输入30个字)