刚进入后台的时候消息处理时候我用了本地推送!可以看我前边写的博客,怎么处理刚进入后台接收推送的案例,链接

/**

注释:打开推送的三种方式:-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刚进入后台接受推送、打开推送调转到相应的界面的更多相关文章

  1. IM-iOS退出后台接受消息,app退出后台能接收到推送

    App被失活状态的时候可以走苹果的APNS:但是在活跃的时候却接受不到推送! 那就用到本地推送:UILocalNotification 消息神器. 处理不好可能会有很多本地推送到来,那么问题来了要在什 ...

  2. android系统和ios系统是如何实现推送的,ios为什么没有后台推送

    ios系统为什么没有后台推送? iOS 为了真正地为用户体验负责,不允许应用在后台活动.有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用). ...

  3. Android P正式版即将到来:后台应用保活、消息推送的真正噩梦

    1.前言 对于广大Android开发者来说,Android O(即Android 8.0)还没玩热,Andriod P(即Andriod 9.0)又要来了.   下图上谷歌官方公布的Android P ...

  4. iOS 之消息推送(个推)---个人小结

    前言:自从上个星期开始整这个推送,弄了差不多一个星期,今天终于给整好了,因此现在来记录这段"奇妙"的旅程. 我们公司使用的消息推送是用的第三方--个推,这里不得不说一下,个推的技术 ...

  5. 最新的极光推送服务器端代码(java服务器后台向手机端自定义推送消息)

    一共两个类 一个Jdpush  一个JpushClientUtil 代码如下   注解都写的很清楚 package com.sm.common.ajpush; import org.slf4j.Log ...

  6. Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)

    我因为项目中集成了极光推送,推送的通知栏点开需要确定进入哪个界面就参考了这边文章,感谢作者的无私. 标签: 情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Servi ...

  7. IOS中程序如何进行推送消息(本地推送,远程推送)2(上)

    未看过本地推送的,可以提前看一下本地推送. http://www.cnblogs.com/wolfhous/p/5135711.html =============================== ...

  8. Android 后台应用保活、消息推送

    3.针对以往Android版本的各种保活技术回顾 Android P之前为了搞定客户的投诉:“为什么微信能收到消息而你们的IM却不能?”,为了解决这个“痛点”,广大的Android开发者们只能让各种黑 ...

  9. iOS和Android后台机制对比

    转自:http://blog.csdn.net/zsch591488385/article/details/27232881 一.iOS的“伪后台”程序 首先,先了解一下ios 中所谓的「后台进程」到 ...

随机推荐

  1. mysql2 - 基础

    一.SQL 练习 在java1701下,创建Stuednt 表,并插入以下数据: 增加创建时间字段,如下: 更改所有时间为当前时间: 二.数据库基础知识 1. 关系模型 1.1 表 table.列 c ...

  2. java并发 - 自底向上的原理分析

    [TOC] 事先声明,我只是java并发的新手,这篇文章也只是我阅读<java并发编程的艺术>一书(内容主要涉及前3章)的一些总结和感悟.希望大家能多多讨论,对于错误的地方还请指出. 0. ...

  3. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  4. 我的Java设计模式-观察者模式

    相信大家都有看过<喜洋洋与灰太狼>,说的是灰太狼和羊族的"斗争",而每次的结果都是灰太狼一飞冲天,伴随着一句"我还会回来的......".为灰太狼感 ...

  5. WPF将RGB转为HSL的工具类

    class HSLColor     {         private int _alpha = 255;         public int _hue = 0;         public d ...

  6. ubuntu 下命令行播放器mplayer 使用详解

    ubuntu 下命令行播放器mplayer 使用详解 2011-01-02 21:00:42|  分类: Linux/Unix |  标签: |字号大中小 订阅 使用 MPlayer 播放媒体文件最简 ...

  7. Linux忘记开机密码怎么办?

    Linux忘记开机密码怎么办?1. 开机ESC/Shift,在出现grub画面时,用上下键选中你平时启动linux的那一项,然后按e键2. 再次用上下键选中你平时启动linux的那一项(类似于kern ...

  8. 从1.5K到18K,一个程序员的5年成长之路

    原文地址:点击打开链接 168楼朋友批评的很有道理, 虚心接受. 我自己是开始学的时候已经错过了基础课的学习, 现在也是深受其苦的, 面临技术上的瓶颈, 需要花更多的时间补充这些知识. 希望看到此文的 ...

  9. Linux查看内存使用量和交换区使用量

    Linux查看内存使用量和交换区使用量 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -m total used free shared buffe ...

  10. 芝麻HTTP:Python爬虫入门之URLError异常处理

    1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中,我们需要用try-except语句来包围并捕获相应的异常.下 ...