假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧。

  根据我项目的要求,极光推送跳转指定页面分为两种情况: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 极光推送 如何点击推送消息跳转页面的更多相关文章

  1. iOS极光推送 点击推送消息跳转页面

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  2. 点击button传递消息,但是页面不跳转的解决方法

    最近在做一个物联网的项目时遇到的问题:界面上有很多控制开/关灯的button,通过点击button来控制各个灯的亮灭.我需要将获取的不同的点击事件消息,以Socket通信的方式发送给硬件端的服务监听程 ...

  3. uniapp点击底部tabbar不跳转页面

    一个项目,其设想是这样的,当我进入页面,发现有新版本,提示用户之后,用户点击确定跳转到下载页面. 弹出框要用自己封装的,因为uniapp的弹出框不同的手机上展示的样子不一样,领导的是华为(在这里悄悄吐 ...

  4. android map高德地图显示多个点,并且每个marker点可以响应鼠标点击事件,处理跳转页面

    定义一个数组,然后将要显示的markers放进数组里面,让后循环每个marke对象,赋予监听事件,在监听事件里面写其它需要的功能: js举例: var arr = new Arry(); var ma ...

  5. UpdatePanel中点击按钮Session过期跳转页面相关问题:Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消息

    使用 Response.Write("<script language=javascript>window.location.href='Login.aspx';</scr ...

  6. iOS点击推送消息跳到应用指定页面

    现在的推送用的越来越频繁,几乎每个应用都开始用到了.其实又有几个用户会去看推送消息呢?没办法,产品经理最大啊,只是苦了我们这一帮程序员啊!闲话少说,进入正题.兄弟我用的是极光推送,自然是以极光推送为例 ...

  7. iOS极光推送

    昨天花了一下午的时间研究了下极光推送,也前也是没做过,不知道从何下手!才开始的时候一看官方的SDK感觉好难,不过经过一系列的捣鼓之后,手机收到了推送信息,感觉其实并没有那么难! 1.配置开发证书(得有 ...

  8. iOS极光推送的基本使用

    昨天花了一下午的时间研究了下极光推送,也前也是没做过,不知道从何下手!才开始的时候一看官方的SDK感觉好难,不过经过一系列的捣鼓之后,手机收到了推送信息,感觉其实并没有那么难! 1.配置开发证书(得有 ...

  9. iOS - 极光推送证书的创建及过期处理

    无论iPhone还是安卓,我们用到的所有应用基本都有推送通知服务,因为这是应用很好的推广方式,有新产品了.有新更新了通知下用户及时查看.但Apple有点特殊,它的推送需要发到苹果服务器上中转一下,这就 ...

随机推荐

  1. Django__RBAC

    RBAC : 基于角色的权限访问控制(Role-Based Access Control) RBAC 模型作为目前最为广泛接受的权限模型 角色访问控制(RBAC)引入了Role的概念,目的是为了隔离U ...

  2. 微信小程序之使用本地接口开发

    本文主要讲解如何使用本地接口进行开发,很多人都会遇到这个问题,特别是小程序上线后. 一.解决思路 在小程序开发工具设置网络代理,然后再通过Charles设置代理,将https域名转为本地接口进行访问. ...

  3. gitlab markdown支持页面内跳转

    markdown语法: [to_be_link](#id_name) 标题: ## 2.aaa <a name="id_name"></a> 参考: htt ...

  4. JS大小写字母转换

    var a = "ABCd"; console.log(a.toLowerCase());//转换成小写 console.log(a.toUpperCase());//转换成大写

  5. mysql之其他

    一 IDE工具介绍 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: 1. 测试+链接数据库 2. 新建库 3. 新建表,新增字段+类型+约束 4. 设计表:外键 5 ...

  6. 【后缀数组】洛谷P3809模板题

    题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...

  7. python 学习源码练习(2)——简单文件读取

    #文件创建 #!/usr/bin/python3 'makeTextFile.py--create text file' import os ls = os.linesep #get filename ...

  8. 移动端吸顶(iOS与安卓)

    有的时候经常会遇到移动端吸顶效果,开始我也只是上网查了一下,分别有iOS和android两种样式,如下: /*!*Android*!*/ .head { position: fixed; top: 0 ...

  9. Modelsim独立仿真Vivado Clocking Wizard IP Core

    工欲善其事,必先利其器.在使用Vivado自带的仿真软件仿真的时候,相对于更优秀的仿真工具Modelsim,效率低了很多,为了更高效的开发,我尝试着用Vivado级联Modelsim仿真,但是级联后还 ...

  10. 微信公众号问题:{"errcode":40125,"errmsg":"invalid appsecret, view more at http:\/\/t.cn\/LOEdzVq, hints: [ req_id: kL8J90219sg58 ]"}

    在调试微信公众号授权登录时遇到了这个错误,着实是心烦了半天,公众号相关开发以前是经常做的,很久没有接触了,而且遇到了这么个以前没遇到的问题. {"errcode":40125,&q ...