iOS刚进入后台接受推送、打开推送调转到相应的界面
刚进入后台的时候消息处理时候我用了本地推送!可以看我前边写的博客,怎么处理刚进入后台接收推送的案例,链接
/**
注释:打开推送的三种方式:-peter
1、apns的时候,结束进程退出后台:启动的时候可在 didFinishLaunchingWithOptions的launchOptions中处理;
获取字典 launchOptions 中的 UIApplicationLaunchOptionsRemoteNotificationKey的key
NSDictionary *optionsRemoteNotificationKey = [launchOptions dictionaryValueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
/**二次启动获得推送点击信息,本地储存二次启动的内容 仿qq点击推送栏启动 by peter***/
NSDictionary *optionsRemoteNotificationKey = [launchOptions dictionaryValueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
[[NSUserDefaults standardUserDefaults] setObject:optionsRemoteNotificationKey forKey:kSavePushMessage];
/**为了验证第一次启动的时候不能截获启动信息,加啊alert**/
/**
NSString * str = [NSString stringWithFormat:@"%@",launchOptions];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
UIAlertView *art = [[UIAlertView alloc]initWithTitle:nil message:str delegate:self cancelButtonTitle:@"取消" otherButtonTitles: nil];
[art show];
});
**/
return YES;
}
2、apns的时候,结束进程未退出后台:启动的时候可在 didReceiveRemoteNotification的userInfo中处理;
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSString * appData = [userInfo stringValueForKey:@"appData"];
NSData *jsonData = [appData dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err)
{
NSLog(@"json解析失败:%@",err);
}else{
NSString * positionIdString = [NSString stringWithFormat:@"%@",[dic numberValueForKey:@"positionId"]] ;
if ([dic numberValueForKey:@"positionId"] !=0) {
[[NSNotificationCenter defaultCenter] postNotificationName:kString_DispantData object:positionIdString];
}
}
}
3、本地推送,未结束进程未退出后台(此方达为了解决消息刚进入后台时候没有通知的情况):启动的时候可在 didReceiveLocalNotification的notification中处理;
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
NSDictionary *dic = notification.userInfo;
NSString * positionIdString = [dic stringValueForKey:@"positionId"];
if (![positionIdString isEqualToString:@""]) {
[[NSNotificationCenter defaultCenter] postNotificationName:kString_DispantData object:positionIdString];
}
}
**/
二、处理页面跳转功能
说明:由于情况1都代表app已经结束需要重新启动,只能做本地存储,然后到tabbar页面的时候取出该存储值的对应id然后进行跳转。情况2、3 ,App的tabbar页面已经存在可以注册一个通知在2、3的情况时候发送通知!
1、存储调转
在tabbar的viewDidAppear方法
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSDictionary *optionsRemoteNotificationKey = [[NSUserDefaults standardUserDefaults] objectForKey:kSavePushMessage];
NSString *appDataString = [optionsRemoteNotificationKey stringValueForKey:@"appData"];
if (appDataString&&![appDataString isEqualToString:@""]) {
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:kSavePushMessage];
}
}
2、通知跳转
注册监听tabbar的viewDidLoad方法里边
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushDispanchPositionDetail:) name:kString_DispantData object:nil];
}
方法接收
#pragma mark observer Notification
-(void)pushDispanchPositionDetail:(NSNotification *)notify
{
if (notify.object&&![notify.object isEqualToString:@""]) {
[self pushData:notify.object];
}
}
- (void)pushData:(NSString *)positionId{
[self setSelectedIndex:MainTabBarIndex_User];
RootNavigationController* selNavi = [self.viewControllers objectAtIndex:MainTabBarIndex_User];
HHPositionDetailC *vc = [[HHPositionDetailC alloc] init];
vc.positionId = [positionId longLongValue];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
selNavi.toolbar.hidden = YES;
[selNavi pushViewController:vc animated:YES];
HDMyPositionViewController *myPositionVC = [[HDMyPositionViewController alloc]init];
NSMutableArray *mutArray = [NSMutableArray arrayWithArray:selNavi.viewControllers];
[mutArray insertObject:myPositionVC atIndex:1];
selNavi.viewControllers = [mutArray copy];
});
}
详细解释跳转代码
[self setSelectedIndex:MainTabBarIndex_User];
RootNavigationController* selNavi = [self.viewControllers objectAtIndex:MainTabBarIndex_User];
HHPositionDetailC *vc = [[HHPositionDetailC alloc] init];
vc.positionId = [positionId longLongValue];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
selNavi.toolbar.hidden = YES;
[selNavi pushViewController:vc animated:YES];
HDMyPositionViewController *myPositionVC = [[HDMyPositionViewController alloc]init];
NSMutableArray *mutArray = [NSMutableArray arrayWithArray:selNavi.viewControllers];
[mutArray insertObject:myPositionVC atIndex:1];
selNavi.viewControllers = [mutArray copy];
});
1、找到所进入的viewController的根导航Navigation;然后进行选中(self代表tabbar) [self setSelectedIndex:MainTabBarIndex_User];
2、然后延迟调转,由于初始化tababr的原因不延迟跳转会出现调转不进去的情况;所以做延迟跳转处理。
[selNavi pushViewController:vc animated:YES];
3、找到当前的viewControllers数组,创建需要返回的二级页面加入栈中!
这样就能点推送进入C,返回B,在返回所需要的tabbar的某个界面。
iOS刚进入后台接受推送、打开推送调转到相应的界面的更多相关文章
- IM-iOS退出后台接受消息,app退出后台能接收到推送
App被失活状态的时候可以走苹果的APNS:但是在活跃的时候却接受不到推送! 那就用到本地推送:UILocalNotification 消息神器. 处理不好可能会有很多本地推送到来,那么问题来了要在什 ...
- android系统和ios系统是如何实现推送的,ios为什么没有后台推送
ios系统为什么没有后台推送? iOS 为了真正地为用户体验负责,不允许应用在后台活动.有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用). ...
- Android P正式版即将到来:后台应用保活、消息推送的真正噩梦
1.前言 对于广大Android开发者来说,Android O(即Android 8.0)还没玩热,Andriod P(即Andriod 9.0)又要来了. 下图上谷歌官方公布的Android P ...
- iOS 之消息推送(个推)---个人小结
前言:自从上个星期开始整这个推送,弄了差不多一个星期,今天终于给整好了,因此现在来记录这段"奇妙"的旅程. 我们公司使用的消息推送是用的第三方--个推,这里不得不说一下,个推的技术 ...
- 最新的极光推送服务器端代码(java服务器后台向手机端自定义推送消息)
一共两个类 一个Jdpush 一个JpushClientUtil 代码如下 注解都写的很清楚 package com.sm.common.ajpush; import org.slf4j.Log ...
- Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)
我因为项目中集成了极光推送,推送的通知栏点开需要确定进入哪个界面就参考了这边文章,感谢作者的无私. 标签: 情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Servi ...
- IOS中程序如何进行推送消息(本地推送,远程推送)2(上)
未看过本地推送的,可以提前看一下本地推送. http://www.cnblogs.com/wolfhous/p/5135711.html =============================== ...
- Android 后台应用保活、消息推送
3.针对以往Android版本的各种保活技术回顾 Android P之前为了搞定客户的投诉:“为什么微信能收到消息而你们的IM却不能?”,为了解决这个“痛点”,广大的Android开发者们只能让各种黑 ...
- iOS和Android后台机制对比
转自:http://blog.csdn.net/zsch591488385/article/details/27232881 一.iOS的“伪后台”程序 首先,先了解一下ios 中所谓的「后台进程」到 ...
随机推荐
- 在Mac下配置Maven环境
下载Maven安装文件,(http://maven.apache.org/download.html)如:apache-maven-3.5.0-bin.zip,然后解压到本地目录. 打开 .bash_ ...
- textarea只允许上下调节尺寸
对于extarea,因为如果不做限制的话,它是可以自由调节尺寸的,对于这一点我相信用户是非常喜欢的,因为每个人都有自己认为合适的尺寸,但是对于前端来说就比较头疼了,因为随意调节宽高,就会破坏整体布局, ...
- 软AP的实现------hostapd的编译运行
最近要给摄像头做一个软ap,让手机能够连上这个热点,从而能够与摄像头进行通信. 1.什么是hostapd : hostapd能够使得无线网卡切换为master模式,模拟AP(通常可以认为是路由器)功能 ...
- R实践 第二篇:创建数据集
准备数据是数据分析的第一步,由数据构成集合,我们称作数据集,数据集的结构是行列式的,行表示观测,列表示变量.把数据读入到R中,转换为合适的数据结构,能够提高数据分析的效率.在数据分析中,常用的存储数据 ...
- 搜索引擎的缓存(cache)机制
什么是缓存? 在搜索领域中,所谓缓存,就是在高速内存硬件设备上为搜索引擎开辟一块存储区,来存储常见的用户查询及其结果,并采用一定的管理策略来维护缓存区内的数据.当搜索引擎再次接收到用户的查询请求时,首 ...
- 子沐代码段——Flask+Mysql+Echarts可视化
前言 子沐不久前,使用Scrapy爬取了智联招聘的职位数据,并部署到服务器上,设置了定时任务.数据量日益庞大.子沐在想,数据不过只是存在数据库里,并没有什么意义,所以子沐萌发一个想法,那就是做一个可视 ...
- 基于Jenkins+Git+Gradle的Android持续集成
本文参考了: http://my.oschina.net/uboluo/blog/157483 http://java.dzone.com/articles/automating-continuous ...
- 详解Linux Initrd
在Linux操作系统中,有一项特殊的功能--初始化内存盘INITRD(INITial Ram Disk)技术,而且内核支持压缩的文件系统映像.有了这两项功能,我们可以让Linux系统从小的初始化内存盘 ...
- The currently displayed page contains invalid values.
1 错误描述 2 错误原因 3 解决办法
- 教我徒弟Android开发入门(三)
前言: 老实说,我有点不知道该讲什么了,希望看过的人能给我提提意见,感激不尽. 本期知识点: 长按事件,log的简单使用,双击退出程序功能的实现 正文: 上一期我们了解到点击事件其实就是让控件绑定一个 ...