关于拼过消息推送回调,然后跳转到指定界面

最近的项目里面需要用到消息推送,在接收到推送过来的消息后需要跳转到指定的界面,然后点击“返回”后需要返回到退出app时的那个界面。之前也做过类似的功能,但是效果不好,这次重新研究了一下,找到了比较好的解决办法。

和 之前不同的是,苹果之前的推送回调消息分不同的情况在不同的方法中回调推送消息,但是iOS8之后改为了只在

didReceiveRemoteNotification来处理所有推送的回调消息。

首先跳转界面也分不同的情况,但是iOS开发用的最多的就是在UINavigationController的基础上push一个界面,在这里,界面的 跳转用到的就是这个方法,所以跳转界面之前必须先找到UINavigationController才能跳转。

(1)如何找到项目中的所有的UINavigationController。我的项目框架的这样的:window的rootViewcontroller上是一个侧滑的视图(DDMenu),DDMenu的rootViewcontroller上是UITabBarController,UITabBarController的rootViewcontroller添加的UINavigationController。所以我的代码是这样的:

//找到导航控制器数组(根据最开始搭建app框架是来获取)

UIWindow *window = [UIApplication sharedApplication].delegate.window;

DDMenuController *DDmenuController = (DDMenuController *)window.rootViewController;

UITabBarController * table = (UITabBarController *)DDmenuController.rootViewController;

NSArray *navArray = table.viewControllers;

至此,找到了存放导航控制器数组,这个一定是要根据自己项目的框架来获取的,不然是获取不到的。

(2)存放导航控制器数组找到了 ,现在必须确定是哪个具体的UINavigationController,才能执行跳转。

所以需要记录退出app时window在哪个导航控制器上。所以在进入后台模式(调用方法:applicationDidEnterBackground

)时在本地保存一个值,代码是这样的:

UIWindow *window = [UIApplication sharedApplication].delegate.window;

DDMenuController *DDmenuController = (DDMenuController *)window.rootViewController;

UITabBarController * table = (UITabBarController *)DDmenuController.rootViewController;

if (table.selectedIndex) {

//记录点击的选中的table的index,,,

APPLog(@"tableSelectedIndex:%lu",(unsigned long)table.selectedIndex);

[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%lu",(unsigned long)table.selectedIndex] forKey:@"tableSelectedIndex"];

}

else {

APPLog(@"tableSelectedIndex不存在");

}

(3)根据索引,在消息回调的方法中取出你需要跳转的UINavigationController就可以实现跳转了。

注意事项:进入app是分不同的情况的,比如,app可能是杀死的状态,还有可能是后天模式,所以如果是杀死状态下进入的app,再点击返回的时候应该是返回到首页的,所以在执行app入口类的第一个方法:(didFinishLaunchingWithOptions

)时,需要执行下面的代码:

//每次进入app前都存储tableSelectedIndex为0

[[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"tableSelectedIndex"];

另外,如果觉得不保险,防止app进入后台模式时记录tableSelectedIndex出现错误,可以在每个导航控制器的跟视图界面中加入保存tableSelectedIndex的方法。

----------------结束---------------

时间: 2024-11-08 13:19:03

关于拼过消息推送回调,然后跳转到指定界面的相关文章

Android消息推送:手把手教你集成小米推送

前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Demo,并给出简易推送Demo 看该文档前,请先阅读我写的另外两篇文章: 史上最全解析Android消息推送解决方案 Android推送:第三方消息推送平台详细解析 目录 1. 官方Demo解析 首先,我们先对小米官方的推送Demo进行解析. 请先到官网下载官方Demo和SDK说明文档 1.1 Demo

C(++) Websocket消息推送---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

使用swoole进行消息推送通知,配合vb.net进行客户端开发一样爽

在以前的项目中,就曾听说过swoole的大名,想用来进行消息推送,但是当时只是有了初步的了解,并不敢大胆的运用到线上产品.所谓 识不足则多虑,威不足则多怒.所以就是怕,只能跟领导说了运用极光的推送功能,而且还说出了一定的理由,领导自然也只有相信了,那就用极光推送吧! 最近闲来无事,又重新温习了一下swoole的消息通知功能,虽然在项目开发当时,也曾实现过简单的操作的,但是这次温习更加深了学习,配合vb.net进行开发,感觉还是棒棒哒,下面是一套实现过程,如有需要参考,请拿去,不谢! 首先,我的开

基于socket.io的实时消息推送

用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化,如果没有来自客户端的请求,用户就不会看到这些变化. 这种模式是不适合某些应用场景的,比如在社交网络用户需要近乎实时地知道其他用户最新的信息.对于普通站点来说, 请求-响应模式可以满足绝大多数的功能需求,但总有某些功能我们希望能够为用户提供实时消息的体验. 为解决这个问题,有两种方案可以选择: 仍旧使

node.js Websocket消息推送---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

友盟消息推送

博主也是第一次使用友盟消息推送,其中的配置我也不需要多讲,在这里附上iOS客户端友盟消息推送的集成文档,并讲讲个人使用心得 iOS友盟消息推送集成文档 这里既有集成文档的讲解步骤,还有证书配置的指南,只需要按照步骤集成即可. 1.配置服务器地址 友盟消息推送后台:适配iOS9,在info.plist文件中按截图配置 以iOS9 SDK编译的工程会默认以SSL安全协议进行网络传输,即HTTPS,如果依然使用HTTP协议请求网络会报系统异常并中断请求.目前可用如下两种方式保持用HTTP进行网络连接:

基于 Pushlets 的消息推送设

Pushlets 是通过长连接方式实现“推”消息的.推送模式分为:Poll(轮询).Pull(拉).本文围绕 Pull 模式进行设计. 原理 客户端发起请求,服务端接收到请求后根据 Pushlets 协议进行处理.推数据通过 HTTP 响应返回. 客户端在接收到响应后根据 Pushlets 协议进行处理,重新发起请求.Pull 模式时序: join:join 请求,服务器端建立 Pushlet 会话 join-ack:join 应答,返回会话 id listen:订阅并监听主题 listen-a

[转]PhoneGap使用PushPlugin插件实现消息推送

本文转自:http://my.oschina.net/u/1270482/blog/217661 http://devgirl.org/2013/07/17/tutorial-implement-push-notifications-in-your-phonegap-application/ 概括 Android设备通过GCM服务来接收推送消息,而iOS设备这从苹果的APN服务获取.虽然按照负载来说这是两种不同的服务,但是证书都在从第三方接收消息的时候是需要作为一个存储和转发类型的服务.辨别接收

iOS 细说消息推送

经常有同学问我们,iOS上推送究竟怎么做啊,为什么我的设备总收不到推送呢,这里跟大家集中讨论一下iOS上推送的实现细节. APNS的推送机制 与Android上我们自己实现的推送服务不一样,Apple对设备的控制非常严格,消息推送的流程必须要经过APNs: 这里 Provider 是指某个应用的Developer,当然如果开发者使用AVOS Cloud的服务,把发送消息的请求委托给我们,那么这里的Provider就是AVOS Cloud的推送服务程序了.上图可以分为三步: 第一步:AVOS Cl