iOS:极光推送控制器跳转

在前面已经做完了极光消息的推送,那么有消息了,如何跳转到需要的控制器呢?其实,主要还是在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 = 4;
        KJNavgationController *navc = rootVC.viewControllers[4];
        self.mineVC = navc.viewControllers[0];
        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 = 1;
    }

    // 应用正处理前台状态下,不会收到极光推送消息,因此在此处需要额外处理一下
    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[4];
        self.mineVC = navc.viewControllers[0];
        if (buttonIndex == 0) {
            self.mineVC.tabBarItem.badgeValue = [NSString stringWithFormat:@"%@",self.badge];
        }else{
            KJNewFriendController *newVC = [[KJNewFriendController alloc]init];
            rootVC.selectedIndex = 4;
            [self.mineVC.navigationController pushViewController:newVC animated:YES];
            [self CancelBadgeValue];
        }
    }else{  //非根控制器
        KJTabViewController *rootVC = (KJTabViewController *)[UIApplication sharedApplication].keyWindow.rootViewController;
        KJNavgationController *navc = rootVC.viewControllers[4];
        self.mineVC = navc.viewControllers[0];
        if (buttonIndex == 0) {
            self.mineVC.tabBarItem.badgeValue = [NSString stringWithFormat:@"%@",self.badge];
        }
        if (buttonIndex == 1) {
            [currentVC.navigationController popToRootViewControllerAnimated:NO];
            rootVC.selectedIndex = 4;
            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:0];
    id nextResponder = [frontView nextResponder];
    if ([nextResponder isKindOfClass:[UIViewController class]]){
        result = nextResponder;
    }else{
        result = window.rootViewController;
    }
    return result;
}
时间: 2024-10-01 10:28:17

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

phonegap + 极光推送 + 页面跳转 (ios)

安卓的解决办法请参见这里:安卓解决办法 ios如果没有页面跳转的需求的话就使用极光推送,如果有页面跳转如果用了极光推送就只有用oc去写,但是我不会oc,所以智能放弃极光选用ios自己的apns来实现 新建项目跟安卓创建项目差不多,新建完成后就是初始话phonegap,注意在phonegap.local.properties文件中phonegap.platform设置为ios cmd移动到新建的项目的phonegap的文件夹下面安装插件: phonegap local plugin add htt

phonegap+极光推送+页面跳转

最近公司使用sencha touch开发app需要实现推送的功能,本渣花了一周的时间才把安卓和ios都实现了推送已经跳转页面的功能.晚上关于推送的资料很少,关于推送后页面跳转的资料就更少了,所以这里记录一下怕以后忘了. 首先是安卓的实现方式(首先需要在极光推送上面去注册一个账号): 1:用sencha CMD创建st应用: sencha -sdk D:\java\sencha-touch\touch-2.3.1 generate app FirstApp ../FirstApp 这样就生成了一个

ios极光推送通知

iOS极光推送文档 一.创建工程 Product Name:baixin Company Identifier:com.bluewave Bundle Identifier:com.bluewave.baixin 二.申请证书 1.创建应用程序ID a.登陆 iOS Dev Center 选择进入iOS Provisioning Portal. b.在 iOS Provisioning Portal中,点击App IDs进入App ID列表. c. 创建 App ID,如果 ID 已经存在可以直

项目实战:iOS极光推送集成(30分钟搞定)

推送有非常多,如个推.友盟.融云和极光等等.在这里就讲下怎样使用极光推送. 主要内容是将官方文档资料详细汇总并一步一步集成到项目中,您也能够直接去官方文档阅览. 极光推送SDK下载 直接打开官方文档下载最新的SDK 极光网创建APP并上传证书 一.制作推送证书和描写叙述文件:须要注意要制作两个证书,一个是測试证书,一个是公布证书,详细看官方文档截图:点击查看证书制作 直接看<iOS 证书 设置指南>其它的不用看了,废话太多 二.在极光推送官网注冊你的APP吧. bundle id要和你项目一直

iOS极光推送

1.配置开发证书(得有开发者账号,个人,企业的都可以) 开发环境测试 在对 JPush iOS 开发环境进行测试前,请确保 3 个统一: App 是开发环境打包(开发证书 Development) 上传了开发证书并验证通过 Portal 上的应用设置为开发环境 发布环境测试 在对 JPush iOS 生产环境进行测试前,请确保 3 个统一: App 是 ad-hoc 打包或者App Store 版本(发布证书 Production) 上传了发布证书并验证通过 Portal 上的应用设置为生产环境

iOS: 极光推送

之前做过环信和友盟的推送,照着官方文档集成其实挺简单的,今天公司需要,特地做了一下极光推送.不用不知道,原来极光推送集成如此简单,不得不说说了. 当然做推送钱需要做一些准备工作了,就是推送必须的p12推送证书:开发环境(开发时测试需要的推送证书).生产环境(发布到AppStore时需要的推送证书),因为xcode已经升级到了7.0以上,所以一些真机测试的配置文件证书就不需要自己手动去创建了,只要有Apple ID,真机测试时,就能自动生成,免费测试: 制作证书的过程就不啰嗦了,详细看官方文档或者

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

iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度.提高应用的留存率.极光推送客户端支持 Android, iOS 两个平台. 本 iOS SDK 方便开发者基于 JPush 来快捷地为 iOS App 增加推送功能,减少集成 APNs 需要的工作量.开发复杂度. 主要

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

极光在配置ios端推送时,需要上传p12证书,如果遇到如下图:: 证书上传未通过的原因一般有: 1.当前上传的p12证书密码输入有误: 2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候请不要展开证书: 3.当前上传的证书环境不对,如:在上传开发证书的地方上传了生产证书: 4.该证书已在本账号的其它应用使用: 5.现上传的证书与当前应用已上传成功的证书的bundle id不一致. 前四种原因都可以自己搞定,但最后一种就比较麻烦了... 我正好是因为第五条原因,两次的bundleid

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

今天试用了极光推送API 用它是因为,大多数人说它的文档是最全的,但是用过之后,发现关于IOS的文档,还是很不够,导致走了一点弯路! 特别是服务端的代码:https://github.com/jpush/jpush-api-java-client  for java Java代码   JPushClient jpushClient = new JPushClient(masterSecret, appKey, 0, DeviceEnum.Android, false); CustomMessag