概述
在做项目时遇到了这个问题,相信跟大家一样,不是不会做,但是就是不是很会做,然后就百度,后来发现没有适合我的。于是综合手机系统版本和程序的生命周期进行叙述。
前面证书的流程忽略,如果不会百度一大堆。
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点击通知跳转到对应的界面 (1 手机系统版本 2 程序在前台 后台 死掉)的全部内容,希望文章能够帮你解决iOS基于JPush点击通知跳转到对应的界面 (1 手机系统版本 2 程序在前台 后台 死掉)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复