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点击通知跳转到对应的界面内容请搜索靠谱客的其他文章。
发表评论 取消回复