我是靠谱客的博主 俭朴红牛,这篇文章主要介绍iOS基于JPush点击通知跳转到对应的界面 (1 手机系统版本 2 程序在前台 后台 死掉),现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
在做项目时遇到了这个问题,相信跟大家一样,不是不会做,但是就是不是很会做,然后就百度,后来发现没有适合我的。于是综合手机系统版本和程序的生命周期进行叙述。 前面证书的流程忽略,如果不会百度一大堆。 1.注册通知:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//根据系统分: 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 以上:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//(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 一下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (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 以上


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


复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
- (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点击通知跳转到对应的界面 (1 手机系统版本 2 程序在前台 后台 死掉)的全部内容,更多相关iOS基于JPush点击通知跳转到对应的界面内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部