iOS 极光推送 如何点击推送消息跳转页面
假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧。
根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情况下。app在前台跳转页面暂时没做过。
-.杀死app情况
这种情况app是由推送消息唤醒的,app启动就必须触发这个方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ;
判断app是否是由推送消息唤醒的,看下面:
把这个写在上面的方法中即可。但是有时候可能会出问题。下面有方法解决。
if (launchOptions) { //是否有推送消息
NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; //这是判断app是否是由远程通知启动的 若是由本地通知启动的 则把 UIApplicationLaunchOptionsRemoteNotificationKey 换成 UIApplicationLaunchOptionsLocalNotificationKey
if (remoteNotification) { //是否有远程推送消息
[self jumpToViewctroller:remoteNotification]; //这是跳转页面的方法。
}
}
//跳转方法
-(void)jumpToViewctroller:(NSDictionary *)remoteNotification{
//remoteNotification是消息的json格式,跳转指定控制器首先你需要跟后台商量一下,添加一个字段。我这里添加的是jump,如果是1跳转这个,是2的话跳转那个等等。
if ([[NSString stringWithFormat:@"%@",remoteNotification[@"jump"]] isEqualToString:@"1"]) {
//这里注意一下。大多数页面都是UINavigationController的子控制器。当然了,在这里你是不能push进去的。必须present进去。此时你可能会问,那存储一个key值present是干什么用的。哈哈,这是告诉你要跳转的控制器,我是被present进来的。所以我返回的时候你也要把我diss回去。同时你也要清除它。
/*
控制器的返回方法。
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"present"] isEqualToString:@"1"]) {
[self dismissViewControllerAnimated:YES completion:^{
[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"present"]; // 这里最好完全清除它。
}];
}else{
[self.navigationController popViewControllerAnimated:YES];
}
*/
DelivedViewController *VC = [DelivedViewController new];
[[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"present"] ;
[[NSUserDefaults standardUserDefaults] synchronize];
UINavigationController *na = [[UINavigationController alloc] initWithRootViewController:VC];
[self.window.rootViewController presentViewController:na animated:YES completion:nil];
}
}
以上就是app未运行的情况下跳转页面的。 注意: 前面说了判断是否有推送消息可能有问题。我遇到的问题就是 程序奔溃。可以让它延迟执行,方法如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 忽略 。。。。。。
[self performSelector:@selector(sendNotation:) withObject:launchOptions afterDelay:1.5];
return YES;
}
-(void)sendNotation:(NSDictionary *)launchOptions{
if (launchOptions) {
NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
if (remoteNotification) {
[self jumpToViewctroller:remoteNotification];
}
}
}
这样就ok了。
二,app在后台运行情况。
这种情况就非常简单了。 上代码!
// iOS 10 Support 程序在后台时收到通知,点击通知栏进入app
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//UNPushNotificationTrigger 远程(通知类型)
[JPUSHService handleRemoteNotification:userInfo];//userInfo消息数据,包含jump。
if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive ) {
[self jumpToViewctroller:userInfo];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0; //本地消息清0
[JPUSHService setBadge:0];//极光消息清0
}
}
completionHandler(); // 系统要求执行这个方法
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
// Required, iOS 7 Support
[JPUSHService handleRemoteNotification:userInfo];
if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive ) {
[self jumpToViewctroller:userInfo];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[JPUSHService setBadge:0];
}
completionHandler(UIBackgroundFetchResultNewData);
}
好了,以上就是全部内容,本人小白一枚,难免有理解不到位的地方,请各位大佬指正。谢谢!
iOS 极光推送 如何点击推送消息跳转页面的更多相关文章
- iOS极光推送 点击推送消息跳转页面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- 点击button传递消息,但是页面不跳转的解决方法
最近在做一个物联网的项目时遇到的问题:界面上有很多控制开/关灯的button,通过点击button来控制各个灯的亮灭.我需要将获取的不同的点击事件消息,以Socket通信的方式发送给硬件端的服务监听程 ...
- uniapp点击底部tabbar不跳转页面
一个项目,其设想是这样的,当我进入页面,发现有新版本,提示用户之后,用户点击确定跳转到下载页面. 弹出框要用自己封装的,因为uniapp的弹出框不同的手机上展示的样子不一样,领导的是华为(在这里悄悄吐 ...
- android map高德地图显示多个点,并且每个marker点可以响应鼠标点击事件,处理跳转页面
定义一个数组,然后将要显示的markers放进数组里面,让后循环每个marke对象,赋予监听事件,在监听事件里面写其它需要的功能: js举例: var arr = new Arry(); var ma ...
- UpdatePanel中点击按钮Session过期跳转页面相关问题:Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消息
使用 Response.Write("<script language=javascript>window.location.href='Login.aspx';</scr ...
- iOS点击推送消息跳到应用指定页面
现在的推送用的越来越频繁,几乎每个应用都开始用到了.其实又有几个用户会去看推送消息呢?没办法,产品经理最大啊,只是苦了我们这一帮程序员啊!闲话少说,进入正题.兄弟我用的是极光推送,自然是以极光推送为例 ...
- iOS极光推送
昨天花了一下午的时间研究了下极光推送,也前也是没做过,不知道从何下手!才开始的时候一看官方的SDK感觉好难,不过经过一系列的捣鼓之后,手机收到了推送信息,感觉其实并没有那么难! 1.配置开发证书(得有 ...
- iOS极光推送的基本使用
昨天花了一下午的时间研究了下极光推送,也前也是没做过,不知道从何下手!才开始的时候一看官方的SDK感觉好难,不过经过一系列的捣鼓之后,手机收到了推送信息,感觉其实并没有那么难! 1.配置开发证书(得有 ...
- iOS - 极光推送证书的创建及过期处理
无论iPhone还是安卓,我们用到的所有应用基本都有推送通知服务,因为这是应用很好的推广方式,有新产品了.有新更新了通知下用户及时查看.但Apple有点特殊,它的推送需要发到苹果服务器上中转一下,这就 ...
随机推荐
- 项目实战10.1—企业级自动化运维工具应用实战-ansible
实战环境: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测 ...
- scala的Option
当一个函数既要返回对象,又要返回null的时候,使用Option[] http://www.runoob.com/scala/scala-options.html Option是scala的选项,用来 ...
- 在commons-lang3包中StringUtils类的ordinalIndexOf中有一个错误
* StringUtils.ordinalIndexOf(null, *, *) = -1 * StringUtils.ordinalIndexOf(*, null, *) = -1 * String ...
- TPYBoard实例之利用WHID为隔离主机建立隐秘通道
本文作者:xiaowuyi,来自FreeBuf.COM(MicroPythonQQ交流群:157816561,公众号:MicroPython玩家汇) 0引言 从2014年BADUSB出现以后,USB- ...
- OTCBTC上线币币交易
我们在这里很高兴的宣布,OTCBTC 的币币交易区,即将在 2018/01/11 于 08:00 上线. 这个币币交易区,将会跟所有现有的交易所很不一样,我们将开放用户自主上币,且所有品种不收任何上架 ...
- (6综合实验)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述http://www.cnblogs.com/jsxyhelu/p/7907241.html2环境架设http://www.cn ...
- 安装cocoapods遇到的问题
1.终端报下面的错误 ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod 解决方 ...
- SpringMVC的映射器、适配器、解析器
1.处理器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2springmvc的适配器 对映 ...
- MongoDB建立主从复制小案例(一主一从)
花了两天学习了mongoDB, 今天接触到了mongo的主从配置, 把它记下来 1. 开启两个mongo服务器(用于一主一从, 没有加安全验证相关参数 : 可以使用mongd-help查看) mong ...
- c/s与b/s 动态网站与静态网站 (网站编码统一“UTF-8”)
1.c/s和b/s 第一张图是b/s 可以随时随地的浏览 (在服务器增加网页就能增加功能,只要改变网页就能使用户同步更新,共享性也强,开发也简单,在广域网和局域网都能建造b/s结构,然后通过int ...