在前面已经做完了极光消息的推送,那么有消息了,如何跳转到需要的控制器呢?其实,主要还是在userInfo这个消息里面做判断来处理,具体如下:

下面这两个是远程推送时接收消息的方法,这是应用程序提供的方法,只要成功注册了极光推送,推送消息时,就会调用这两个方法,在这两个方法收到的userInfo消息做判断即可。

// Required,For systems with less than or equal to iOS6

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;

// IOS 7 Support Required

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;

具体代码如下:我这里是区别环信推送消息控制器跳转和环信推送消息控制器跳转

通过在极光推送的服务器上设置自定义字段,用来判断跳转的是极光推送的消息控制器

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

    // Required,For systems with less than or equal to iOS6
[JPUSHService handleRemoteNotification:userInfo];
} -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ // IOS 7 Support Required
[JPUSHService handleRemoteNotification:userInfo];
if (completionHandler) {
completionHandler(UIBackgroundFetchResultNewData);
} //消息提示数字
self.badge = userInfo[@"aps"][@"badge"];
//取得Extras字段内容
NSString *customizeValue = [userInfo valueForKey:@"customizeExtras"]; //服务端中Extras字段,key是自己定义的,用来判断跳转的是极光推送的消息控制器 // 启动程序,跳转到极光推送消息的控制器
if ([customizeValue isEqualToString:@"Jpush"]) {
KJTabViewController *rootVC = (KJTabViewController *)[UIApplication sharedApplication].keyWindow.rootViewController;
rootVC.selectedIndex = ;
KJNavgationController *navc = rootVC.viewControllers[];
self.mineVC = navc.viewControllers[];
KJNewFriendController *newVC = [[KJNewFriendController alloc]init];
[self.mineVC.navigationController pushViewController:newVC animated:YES];
[self CancelBadgeValue];
application.applicationIconBadgeNumber -= [self.badge integerValue];
}
else{ // 启动程序,跳转到环信推送消息的控制器
KJTabViewController *rootVC = (KJTabViewController *)[UIApplication sharedApplication].keyWindow.rootViewController;
rootVC.selectedIndex = ;
} // 应用正处理前台状态下,不会收到极光推送消息,因此在此处需要额外处理一下
if (application.applicationState == UIApplicationStateActive) {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"您有一条推送消息"
message:userInfo[@"aps"][@"alert"]
delegate:self
cancelButtonTitle:@"取消"
otherButtonTitles:@"确定",nil];
[alert show]; //注册监听,取消badgeValue的数字
[NotyCenter addObserver:self selector:@selector(CancelBadgeValue) name:@"CancelBadgeValueNotification" object:nil];
}
} #pragma mark - UIAlertViewDelegate
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ UIViewController *currentVC = [self getCurrentVC];
if ([currentVC isKindOfClass:[KJTabViewController class]]) { //根控制器
KJTabViewController *rootVC = (KJTabViewController *)currentVC;
KJNavgationController *navc = rootVC.viewControllers[];
self.mineVC = navc.viewControllers[];
if (buttonIndex == ) {
self.mineVC.tabBarItem.badgeValue = [NSString stringWithFormat:@"%@",self.badge];
}else{
KJNewFriendController *newVC = [[KJNewFriendController alloc]init];
rootVC.selectedIndex = ;
[self.mineVC.navigationController pushViewController:newVC animated:YES];
[self CancelBadgeValue];
}
}else{ //非根控制器
KJTabViewController *rootVC = (KJTabViewController *)[UIApplication sharedApplication].keyWindow.rootViewController;
KJNavgationController *navc = rootVC.viewControllers[];
self.mineVC = navc.viewControllers[];
if (buttonIndex == ) {
self.mineVC.tabBarItem.badgeValue = [NSString stringWithFormat:@"%@",self.badge];
}
if (buttonIndex == ) {
[currentVC.navigationController popToRootViewControllerAnimated:NO];
rootVC.selectedIndex = ;
KJNewFriendController *newVC = [[KJNewFriendController alloc]init];
[self.mineVC.navigationController pushViewController:newVC animated:YES];
[self CancelBadgeValue];
}
}
} #pragma mark - 取消极光消息数目
-(void)CancelBadgeValue{
self.mineVC.tabBarItem.badgeValue = nil;
} /**
* 获取当前屏幕显示的viewcontroller
*/
- (UIViewController *)getCurrentVC
{
UIViewController *result = nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
if (window.windowLevel != UIWindowLevelNormal)
{
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow * tmpWin in windows)
{
if(tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
UIView *frontView = [[window subviews] objectAtIndex:];
id nextResponder = [frontView nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]){
result = nextResponder;
}else{
result = window.rootViewController;
}
return result;
}

iOS:极光推送控制器跳转的更多相关文章

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

    假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧. 根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情 ...

  2. iOS 极光推送

    1.关于推送的几个证书.http://www.mobile-open.com/2016/931624.html 进入开发者中心:https://developer.apple.com/account/ ...

  3. iOS极光推送

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

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

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

  5. ios -- 极光推送《1》

    昨天公司项目要加入远程推送功能,自己做显然会很麻烦,所以用了极光的远程推送,下面我会讲如何制作推送证书并使用极光推送进行远程推送. 先讲讲怎么下载推送证书吧(前面的很简单要是知道的可以直接往下滑,简书 ...

  6. (转载)iOS 极光推送SDK 集成指南

    iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能 ...

  7. iOS极光推送,两次Bundleid不一致( 开发证书没有通过验证 是否重新上传证书)的解决方案

    极光在配置ios端推送时,需要上传p12证书,如果遇到如下图:: 证书上传未通过的原因一般有: 1.当前上传的p12证书密码输入有误: 2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候 ...

  8. 关于ios极光推送server端注意的地方

    今天试用了极光推送API 用它是因为,大多数人说它的文档是最全的,但是用过之后,发现关于IOS的文档,还是很不够,导致走了一点弯路! 特别是服务端的代码:https://github.com/jpus ...

  9. iOS极光推送SDK的使用流程

    一.极光推送简介 极光推送是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,整合了iOS.Android和WP平台的统一推送服务.使用起来方便简单,已于集成,解决了原生远程推送繁 ...

随机推荐

  1. 小知识-为什么Linux不需要磁盘碎片整理

      转载至:http://beikeit.com/post-495.html 简单译文: 这段linux官方资料主要介绍了外部碎片(external fragmentation).内部碎片(inter ...

  2. tk界面版股票下载

    from tkinter import * import urllib.request import re,os import threading from tkinter import filedi ...

  3. 追忆似水流年sed

    sed是一种非交互式的流编辑器,默认情况下并不会修改源文件内容,只是把命令的结果输出处理单位:行功能:查找替换.添加.插入.删除适用场景:常规编辑器难以胜任的文本:大文件(几百兆):有规律的文本修改操 ...

  4. Linux各发行版本及其软件包管理方法

    Linux发行版本有很多,按照使用领域分为桌面系统领域和服务器领域.下面简要介绍如下: 1.Red Hat和Fedora:redhat最早发行的个人版本的Linux,自从Red Hat 9.0版本发布 ...

  5. phpqrcode生成带logo的二维码图片

    <?php //include_once('lib/QrReader.php'); //$qrcode = new QrReader('201708211144474410.jpg'); //图 ...

  6. Spring Cloud Eureka 总结

    写在前面的话(给自己) 为了巩固自身学习,从今天(2019.01.08),每天晚上开始总结SpringCloud的相关学习,用于自我勉励,自我积累与人生总结. 总结2018年的我,心态较之从前浮躁,杂 ...

  7. BZOJ 1700 [Usaco2007 Jan]Problem Solving 解题(单调DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1700 [题目大意] 共有p道题目要做,每个月收入只有n元,用于付钱做题之外的部分都会吃 ...

  8. 【后缀自动机】hdu6194 string string string

    题意:给你一个字符串和一个正整数K,让你输出恰好出现K次的子串的数量. 对后缀链接树进行dp预处理后,SAM每个点的endpos大小就是该点结尾的子串出现的次数,maxlen-minlen+1就是子串 ...

  9. 【动态规划】【滚动数组】Educational Codeforces Round 26 D. Round Subset

    给你n个数,让你任选K个,使得它们乘起来以后结尾的0最多. 将每个数的因子2和因子5的数量求出来,记作a[i]和b[i]. 答案就是max{ min{Σa[i],Σb[i]} }(a[i],b[i]是 ...

  10. spring quartz 配置

    quartz简介 各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务.任务调度本身涉及到多线程 ...