iosios 推送跳转指定页面 如何跳转到某一个指定的界面

iOS 点击推送消息跳到应用指定页面的实例
转载 &更新时间:日 10:28:05 & 投稿:lqh
这篇文章主要介绍了iOS 点击推送消息跳到应用指定页面的实例的相关资料,需要的朋友可以参考下
iOS 点击推送消息跳到应用指定页面
现在的推送用的越来越频繁,几乎每个应用都开始用到了。其实又有几个用户会去看推送消息呢?没办法,产品经理最大啊,只是苦了我们这一帮程序员啊!闲话少说,进入正题。兄弟我用的是极光推送,自然是以极光推送为例了。
  现在点击推送消息,有两种跳转方式:1.打开应用,跳转到应用首页;2.打开应用,跳转到指定页面。
​第一种,你什么都不用设置,只要注册极光应用就可以。这里就不写怎么注册极光应用了,可以参考官方文档,写的很详细。
​ 第二种,重头戏来了。
// APP未运行时获取通知的内容 remoteNotification就是你们服务器发送的推送的内容
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{​
NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];​
// 如果​remoteNotification不为空,代表有推送发过来,以下类似
if (remoteNotification) {
// 把应用右上角的图标​去掉 这个最好写上,要不然强迫症会疯的
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
//​ 发通知
[self performSelector:@selector(发送通知的方法,以下相同)withObject:remoteNotification afterDelay:1];
// 程序运行时接收推送 userInfo就是你们服务器发送的推送的内容
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
// Required
[APService handleRemoteNotification:userInfo];
if (userInfo) {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
// 发通知, 通知内容就是userInfo 你可以打印一下
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void
(^)(UIBackgroundFetchResult))completionHandler {
// IOS 7 Support Required
[APService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
if (userInfo){
//​ 发通知
  以上的三个方法,可以让你接收到服务器发过来的推送内容,在主线程中发通知,否则接收不到。如果你想让应用跳转到首页的详情页
- (void)viewDidLoad​{
// 添加观察者​ 让程序执行跳转到详情页的方法
  如果你想让应用跳转到第三页的详情页 在发送通知的方法中加上:
_tabBarViewController.selectedIndex = 2;​
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具ios点击推送消息怎样跳转到指定界面_百度知道
ios点击推送消息怎样跳转到指定界面
我有更好的答案
功能说明JPush SDK 收到推送,通过广播的方式,转发给开发者App,这样开发者就可以灵活地进行处理。这个动作不是必须的。用户有需要才定义 Receiver 类来处理 SDK过来的广播。如果不做这个动作,即不写自定义 Receiver,也不在 AndroidManifest.xml 里配置这个 Receiver,则默认的行为是:接收到推送的自定义消息,则没有被处理可以正常收到通知,用户点击打开应用主界面接受广播如果全部类型的广播都接收,则需要在 AndroidManifest.xml 里添加如下的配置信息:&receiver
android:name=&Your Receiver&
android:enabled=&true&&
&intent-filter&
&action android:name=&cn.jpush.android.intent.REGISTRATION& /&
&action android:name=&cn.jpush.android.intent.MESSAGE_RECEIVED& /&
&action android:name=&cn.jpush.android.intent.NOTIFICATION_RECEIVED& /&
&action android:name=&cn.jpush.android.intent.NOTIFICATION_OPENED& /&
&category android:name=&You package Name& /&
&/intent-filter&&/receiver&每个 Receiver action 详细解释如下。Action - cn.jpush.android.intent.REGISTRATIONSDK 向 JPush Server 注册所得到的注册 ID 。一般来说,可不处理此广播信息。要深入地集成极光推送,开发者想要自己保存App用户与JPush 用户关系时,则接受此广播,取得 Registration ID 并保存与App uid 的关系到开发者自己的应用服务器上。使用极光推送提供的别名与标签功能,是更加简单轻便的绑定App用户与JPush用户的方式,请参考文档:别名与标签使用教程。Intent 参数JPushInterface.EXTRA_REGISTRATION_IDSDK 向 JPush Server 注册所得到的注册 全局唯一的 ID ,可以通过此 ID 向对应的客户端发送消息和通知。Bundle bundle = intent.getExtras();String title = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);Action - cn.jpush.android.intent.MESSAGE_RECEIVED收到了自定义消息 Push 。SDK 对自定义消息,只是传递,不会有任何界面上的展示。如果开发者想推送自定义消息 Push,则需要在 AndroidManifest.xml 里配置此 Receiver action,并且在自己写的 BroadcastReceiver 里接收处理。Intent 参数JPushInterface.EXTRA_TITLE保存服务器推送下来的消息的标题。对应 API 消息内容的 title 字段。对应 Portal 推送消息界面上的“标题”字段(可选).Bundle bundle = intent.getExtras();String title = bundle.getString(JPushInterface.EXTRA_TITLE);JPushInterface.EXTRA_MESSAGE保存服务器推送下来的消息内容。对应 API 消息内容的 message 字段。对应 Portal 推送消息界面上的&消息内容”字段。 Bundle bundle = intent.getExtras();String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);JPushInterface.EXTRA_EXTRA保存服务器推送下来的附加字段。这是个 JSON 字符串。对应 API 消息内容的 extras 字段。对应 Portal 推送消息界面上的“自定义内容”。Bundle bundle = intent.getExtras();String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);JPushInterface.EXTRA_CONTENT_TYPE保存服务器推送下来的内容类型。对应 API 消息内容的 content_type 字段。Bundle bundle = intent.getExtras();String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE);JPushInterface.EXTRA_RICHPUSH_FILE_PATHSDK 1.4.0 以上版本支持。富媒体通消息推送下载后的文件路径和文件名。Bundle bundle = intent.getExtras();String file = bundle.getString(JPushInterface.EXTRA_RICHPUSH_FILE_PATH);JPushInterface.EXTRA_MSG_IDSDK 1.6.1 以上版本支持。唯一标识消息的 ID, 可用于上报统计等。Bundle bundle = intent.getExtras();String file = bundle.getString(JPushInterface.EXTRA_MSG_ID);Action - cn.jpush.android.intent.NOTIFICATION_RECEIVED收到了通知 Push。如果通知的内容为空,则在通知栏上不会展示通知。但是,这个广播 Intent 还是会有。开发者可以取到通知内容外的其他信息。Intent 参数JPushInterface.EXTRA_NOTIFICATION_TITLE保存服务器推送下来的通知的标题。对应 API 通知内容的 n_title 字段。对应 Portal 推送通知界面上的“通知标题”字段。Bundle bundle = intent.getExtras();String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);JPushInterface.EXTRA_ALERT保存服务器推送下来的通知内容。对应 API 通知内容的 n_content 字段。对应 Portal 推送通知界面上的“通知内容”字段。Bundle bundle = intent.getExtras();String content = bundle.getString(JPushInterface.EXTRA_ALERT);JPushInterface.EXTRA_EXTRASDK 1.2.9 以上版本支持。保存服务器推送下来的附加字段。这是个 JSON 字符串。对应 API 通知内容的 n_extras 字段。对应 Portal 推送通知界面上的“自定义内容”字段。Bundle bundle = intent.getExtras();String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);JPushInterface.EXTRA_NOTIFICATION_IDSDK 1.3.5 以上版本支持。通知栏的Notification ID,可以用于清除NotificationBundle bundle = intent.getExtras();int notificationId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);JPushInterface.EXTRA_CONTENT_TYPE保存服务器推送下来的内容类型。对应 API 消息内容的 content_type 字段。 Portal 上暂时未提供输入字段。Bundle bundle = intent.getExtras();String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE);JPushInterface.EXTRA_RICHPUSH_HTML_PATHSDK 1.4.0 以上版本支持。富媒体通知推送下载的HTML的文件路径,用于展现WebView。Bundle bundle = intent.getExtras();String fileHtml = bundle.getString(JPushInterface.EXTRA_RICHPUSH_HTML_PATH);JPushInterface.EXTRA_RICHPUSH_HTML_RESSDK 1.4.0 以上版本支持。富媒体通知推送下载的图片资源的文件名,多个文件名用 “,” 分开。 与 “JPushInterface.EXTRA_RICHPUSH_HTML_PATH” 位于同一个路径。Bundle bundle = intent.getExtras();String fileStr = bundle.getString(JPushInterface.EXTRA_RICHPUSH_HTML_RES);String[] fileNames = fileStr.spilt(&,&);JPushInterface.EXTRA_MSG_IDSDK 1.6.1 以上版本支持。
唯一标识通知消息的 ID, 可用于上报统计等。Bundle bundle = intent.getExtras();String file = bundle.getString(JPushInterface.EXTRA_MSG_ID);Action - cn.jpush.android.intent.NOTIFICATION_OPENED用户点击了通知。一般情况下,用户不需要配置此 receiver action。如果开发者在 AndroidManifest.xml 里未配置此 receiver action,那么,SDK 会默认打开应用程序的主 Activity,相当于用户点击桌面图标的效果。如果开发者在 AndroidManifest.xml 里配置了此 receiver action,那么,当用户点击通知时,SDK 不会做动作。开发者应该在自己写的 BroadcastReceiver 类里处理,比如打开某 Activity 。Intent 参数JPushInterface.EXTRA_NOTIFICATION_TITLE保存服务器推送下来的通知的标题。对应 API 通知内容的 n_title 字段。对应 Portal 推送通知界面上的“通知标题”字段。Bundle bundle = intent.getExtras();String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);JPushInterface.EXTRA_ALERT保存服务器推送下来的通知内容。对应 API 通知内容的n_content字段。对应 Portal 推送通知界面上的“通知内容”字段。Bundle bundle = intent.getExtras();String content = bundle.getString(JPushInterface.EXTRA_ALERT);JPushInterface.EXTRA_EXTRASDK 1.2.9 以上版本支持。保存服务器推送下来的附加字段。这是个 JSON 字符串。对应 API 消息内容的 n_extras 字段。对应 Portal 推送通知界面上的“自定义内容”字段。Bundle bundle = intent.getExtras();String type = bundle.getString(JPushInterface.EXTRA_EXTRA);JPushInterface.EXTRA_NOTIFICATION_IDSDK 1.3.5 以上版本支持。通知栏的Notification ID,可以用于清除NotificationBundle bundle = intent.getExtras();int notificationId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_IDJPushInterface.EXTRA_MSG_IDSDK 1.6.1 以上版本支持。唯一标识调整消息的 ID, 可用于上报统计等。Bundle bundle = intent.getExtras();String file = bundle.getString(JPushInterface.EXTRA_MSG_ID);代码示例public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Log.d(TAG, &onReceive - & + intent.getAction());
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
System.out.println(&收到了自定义消息。消息内容是:& + bundle.getString(JPushInterface.EXTRA_MESSAGE));
// 自定义消息不会展示在通知栏,完全要开发者写代码去处理
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
System.out.println(&收到了通知&);
// 在这里可以做些统计,或者做些其他工作
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
System.out.println(&用户点击打开了通知&);
// 在这里可以自己写代码去定义用户点击后的行为
Intent i = new Intent(context, TestActivity.class);
//自定义打开的界面
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Log.d(TAG, &Unhandled intent - & + intent.getAction());
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。iOS 点击推送信息跳转到指定页面 + 获取当前显示页 - 简书
iOS 点击推送信息跳转到指定页面 + 获取当前显示页
今天有朋友问我推送跳转的问题,正好前段时间项目需求也用到了,现在终结一下
主要有2种情况:
1.程序进入后台,但还没有结速进程,点击通知进到app.
2.程序已经退出后台,点击通知进到app.
先说第一种情况,这种情况主要先获取app当前显示页,然后进行跳转,直接上代码
写了一个demo,先看下我demo的结构
8A03E4E3-D4FF-4455-BB68-19DDCD33D307.png
建了2个分类,方便以后的调用
![B4852E6A-CACC-4B20-B4C7-4A.png](http://upload-images.jianshu.io/upload_images/dadba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
UIView+Tool.m 和 NSObject+Tool.m的实现
UIView+Tool.m
//通过响应者链条获取view所在的控制器
- (UIViewController *)parentController
UIResponder *responder = [self nextResponder];
while (responder) {
i f ([responder isKindOfClass:[UIViewController class]]) {
return (UIViewController *)
responder = [responder nextResponder];
NSObject+Tool.m
引入#import "UIView+Tool.h"
//通过控制器的布局视图可以获取到控制器实例对象
modal的展现方式需要取到控制器的根视图
- (UIViewController *)currentViewController
UIWindow *keyWindow = [UIApplication sharedApplication].keyW
// modal展现方式的底层视图不同
// 取到第一层时,取到的是UITransitionView,通过这个view拿不到控制器
UIView *firstView = [keyWindow.subviews firstObject];
UIView *secondView = [firstView.subviews firstObject];
UIViewController *vc = [secondView parentController];
if ([vc isKindOfClass:[UITabBarController class]]) {
UITabBarController *tab = (UITabBarController *)
if ([tab.selectedViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *nav = (UINavigationController *)tab.selectedViewC
return [nav.viewControllers lastObject];
return tab.selectedViewC
} else if ([vc isKindOfClass:[UINavigationController class]]) {
UINavigationController *nav = (UINavigationController *)
return [nav.viewControllers lastObject];
在ViewController中,新建一个按钮,点击按钮创建一个本地通知
- (IBAction)btn:(id)sender {
[self pushMessage];
//创建本地通知
- (void)pushMessage
//10秒以后发送通知
NSDate *timeDate=[[NSDate alloc] initWithTimeIntervalSinceNow:10];
// 1.创建本地通知
UILocalNotification *localNote = [[UILocalNotification alloc] init];
// 2.设置本地通知的内容
// 2.1.设置通知发出的时间
localNote.fireDate = timeD
// 2.2.设置通知的内容
localNote.alertBody = @"push跳转";
// 2.3.设置滑块的文字(锁屏状态下:滑动来“解锁”)
localNote.alertAction = @"解锁";
// 2.4.决定alertAction是否生效
localNote.hasAction = NO;
// 2.7.设置有通知时的音效
localNote.soundName = @"buyao.wav";
// 2.8.设置额外信息
localNote.userInfo = @{@"type" : @"1"};
// 3.调用通知
[[UIApplication sharedApplication] scheduleLocalNotification:localNote];
在AppDelegate 打开推送权限
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
if ([[UIDevice currentDevice].systemVersion doubleValue] &= 8.0) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[application registerUserNotificationSettings:settings];
return YES;
新建PushViewController,点击通知跳转到该类
// 本地通知回调函数
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
NSLog(@"noti:%@",notification);
//type为与后台同事规定好的参数,根据它来判断跳转到指定的页面
if ([notification.userInfo[@"type"] isEqual:@"1"]) {
PushViewController *vc = [[PushViewController alloc] init];
[[self currentViewController].navigationController pushViewController:vc animated:YES];
第二种情况,当程序已经退出后台,直接上代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
if ([[UIDevice currentDevice].systemVersion doubleValue] &= 8.0) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[application registerUserNotificationSettings:settings];
//这里要注意下 UIApplicationLaunchOptionsRemoteNotificationKey 为远程推送
//UIApplicationLaunchOptionsLocalNotificationKey为本地推送 别忘记修改
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
NSLog(@"localNotif= = %@", localNotif);
if (localNotif) {
//因为这个时候app还没有初始化完成,我们不能获取到当前的显示页面。
有2种解决方案
1.跳转延时几秒后执行,预留一个初始化的时间
2.把推送的数据直接传给ViewController,直接在ViewController中做跳转,个人建议还是第2种
if ([localNotif.userInfo[@"type"] isEqual:@"1"]) {
//第1种方案,延时执行
[self performSelector:@selector(pushComingViewController) withObject:nil afterDelay:2.0f];
//第2种方案,传参
//先在AppDelegate.h声明属性@property (strong, nonatomic) NSDictionary *userI
self.userInfo = localNotif.userI
return YES;
//延迟跳转
- (void)pushComingViewController{
PushViewController *vc = [[PushViewController alloc] init];
[[self currentViewController].navigationController pushViewController:vc animated:YES];
在ViewController中
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate * app = (AppDelegate *)[UIApplication sharedApplication].
if ([app.userInfo[@"type"] isEqual:@"1"]) {
PushViewController *vc = [[PushViewController alloc] init];
[[self currentViewController].navigationController pushViewController:vc animated:YES];
有什么说的吗,也没什么说的吧
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
下边都学会就大神了: 声明:都是网上搜集的,能标明出处的都标了.别只搜集而不看,与君共勉.. 先看完整项目完整App@HackerNews-React-Native用 React Native 完成的 HackerNews 客户端。WeChat实现类似微信朋友圈或者QQ空间...
这是一个用于iOS开发的各种开源库、开源资料、开源技术等等的索引库.转载自:https://github.com/Tim9Liu9/TimLiu-iOSgithub排名 https://github.com/trendinggithub搜索:https://github.c...
我们每个人都生活在社会关系中,相互依赖变得不可或缺。生活的质量从本质上取决于相互依赖。健康、爱、学习、留下遗产都离不开相互关系。 作为一个社会人,当然我们还可以继续拥有独立的生存模式。独立模式可以给我们预留自己的空间,可这并不是我们最终的目的。独立模式实际上也是为了更好地让...
在母亲的眼中,这是一款救命的药。 在母亲的这个年代,已经治好了好几位乳房疼痛的人。母亲说,曾有一个女的,乳房疼痛,到医院治疗,还做了手术,最后还是没有痊愈。后来经人介绍,喝了这一味草药汤剂,最后才健康痊愈。母亲说,她年轻的时候也有过这个情况,也是喝了这草药的汤剂吃好的。自己...
晚上,吃完饭,qz去厨房洗碗,我抱着儿子在旁边说:来,巴金,我们看着妈妈刷碗。 qz:不行,不能让巴金学会刷碗,以后我才不要他这样给别的女人洗碗。 我:照你这么说,我以后不能刷碗了,我要起一个表率的作用(一般没有特殊情况,家里的碗都是由 我来刷)。 她:这不一样 。 我逗她...
吹风了,下雨了,降温了,记得加衣裳。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
怎么样点击通知能跳转到应用程序的指定页面?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你可以在 AppDelegate.m 中的 application:didFinishLaunchingWithOptions: 方法中拦截这个动作并获得相关信息进行自定化操作。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
推送的时候参数
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。首先要初始化sdk,官方文档上有
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)& categories:nil];
& & [JPUSHService setupWithOption:launchOptions appKey:@"" channel:@"Publish channel" apsForProduction:NO];
& & dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    //alias需要看自己的实际情况赋值
& & & & [JPUSHService setTags:nil alias:nil fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {& & & & & &&
& & & & }];
APPDelegate中加入方法
- (void)application:(UIApplication&*)application
didReceiveRemoteNotification:(NSDictionary&*)userInfo
fetchCompletionHandler:(void&(^)(UIBackgroundFetchResult))completionHandler {
&&&&[JPUSHService&handleRemoteNotification:userInfo];
&&&&NSLog(@"userInfo%@",userInfo);
&&&&completionHandler(UIBackgroundFetchResultNewData);
&&&&if&(application.applicationState&==&UIApplicationStateActive) {
&&&&&&&//这里写APP正在运行时,推送过来消息的处理
&&&&}&else&if&(application.applicationState&==&UIApplicationStateInactive&) {
//APP在后台运行,推送过来消息的处理
&&&&&&&&[self&goToMssageViewControllerWith:userInfo];
&&&&}&else&if&(application.applicationState&==&UIApplicationStateBackground) {
//APP没有运行,推送过来消息的处理
&&&&&&&&[self&goToMssageViewControllerWith:userInfo];
//跳转方法
- (void)goToMssageViewControllerWith:(NSDictionary*)msgDic{
&&&&//将字段存入本地,在要跳转的页面用它来判断
&&&&NSUserDefaults*pushJudge = [NSUserDefaults&standardUserDefaults];
&&&&[pushJudge&setObject:@"push"forKey:@"push"];
&&&&[pushJudge&synchronize];
&&&&if&([msgDic[@"type"]isEqualToString:@"Notification_cabinet"]) {
  //这里写要跳转的controller
&&&&UserOrderListViewController&* VC = [[UserOrderListViewController&alloc]init];
&&&&UINavigationController&* Nav = [[UINavigationController&alloc]initWithRootViewController:VC];
&&&&[self.window.rootViewController&presentViewController:Navanimated:YES&completion:nil];
&&&&}&else&if&([msgDic[@"type"]isEqualToString:@"Message_notice"]) {
&&&&&&&&RecommendViewController&*vc = [[RecommendViewController&alloc]&init];
&&&&&&&&UINavigationController&* Nav = [[UINavigationController&alloc]initWithRootViewController:vc];
&&&&&&&&[self.window.rootViewControllerpresentViewController:Nav&animated:YES&completion:nil];
在要跳转的页面中的ViewDidLoad方法中加入
&NSUserDefaults*pushJudge = [NSUserDefaults&standardUserDefaults];
&&&&if([[pushJudgeobjectForKey:@"push"]isEqualToString:@"push"]) {
&&&&&&&&[self.navigationController&setNavigationBarHidden:NOanimated:YES];
&&&&&&&&self.navigationItem.leftBarButtonItem&= [[UIBarButtonItem&alloc]&initWithImage:[UIImage&imageNamed:@""]style:UIBarButtonItemStylePlain target:selfaction:@selector(rebackToRootViewAction)];
具体情况根据自己的APP需要进行修改
阅读(...) 评论()

我要回帖

更多关于 ios 跳转到推送设置 的文章

 

随机推荐