zoukankan      html  css  js  c++  java
  • 关于iOS接收到推送消息后跳转问题

    公司项目要求接收到后台推送后,根据后台传过来的信息进行页面的跳转.

    通过点击推送跳转要分两大种情况,一个是app没有打开,一种是app是打开状态.

     一.首先先分析app没有打开的状态.

    如果当前app没有被打开,当用户点击通知打开app时,在调用

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法时,launchOptions不为nil,会携带一些推送的信息,可以通过代码

        NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 获取到通知传递进来的信息.

    可以根据launchOptions是否为nil来判断用户是通过点击图标进入app还是通过点击通知进入app.

     然后在- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler方法里,可以进行页面之间的跳转.

    二.当app处于被打开状态

    当app处于后台,通过点击通知打开app,也会走- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler方法,通过判断application的状态,来判断用户是由后台点击通知,将app置于活动状态的,

    然后判断当前控制器为哪一种控制器,然后进行push操作(项目里window的根控制器是tabbarController然后嵌套的navigationController),通过下面方法获取到当前的navigationController

    - (UINavigationController *)getCurNavController{

        UINavigationController* navController = (UINavigationController*)self.tabbarVC.selectedViewController// tabbarVC为当前的根控制器

        return navController;

    }

    获取到当前导航控制器后,如果是由后台通知打开的,application状态会为UIApplicationStateInactive

    if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive),然后通过上面方法获取到的导航控制器进行推送.

    如果当前app处于前台, [UIApplication sharedApplication].applicationState == UIApplicationStateActive,

    这时候收到推送会给用户一个弹窗,

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"收到推送" message:nil delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"推送内容", nil];

            alert.delegate = self;

            [alert show];

    然后由用户选择打开推送内容还是关闭.

     

     

  • 相关阅读:
    C# 模拟浏览器请求
    关于获取时间后,时间格式为几天前,几小时前格式转化
    关于通用的C#后台获取前台页面的标签的正则表达式
    关于getHTML()方法和getHtmlAjax()方法 GetHttpLength, 清除HTML标签
    性能测试术语
    聚合报告中90% Line涉及到百分位数的概念
    使用Windows的cmd运行(或通过批处理启动)Python项目(多目录项目)提示找不到模块的解决办法
    OSError: [WinError 6] 句柄无效的解决办法
    python中日志输出重复的解决办法
    截图方法get_screenshot_as_file()注意点
  • 原文地址:https://www.cnblogs.com/lxiaohei103/p/5088872.html
Copyright © 2011-2022 走看看