zoukankan      html  css  js  c++  java
  • iOS用户点击推送消息进入应用后自动跳转到对应的ViewController

    当iOS用户通过点击推送消息进入应用时,在AppDelegate的

    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

    我们可以通过

    NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

    获得推送的userinfo.
    但是didFinishLaunchingWithOptions会比MainViewController的viewDidLoad先执行,此时肯定不能present一个新的View,应该是让MainViewController启动后再检查是否收到了推送,然后打开对应的视图
    如果remoteNotification不为空,则说明用户通过推送消息进入,那么可以声明一个属性

    @property (nonatomic) BOOL isLaunchedByNotification;

    用于标识用户是否通过点击通知消息进入本应用。
    此时,

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

    一定会被调用,iOS7可以使用

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

    因为此方法的调用时,MainViewController已经被初始化,所以我们已经可以在MainViewController注册推送消息的监听,用于展示对应的视图,如下:

    //订阅展示视图消息,将直接打开某个分支视图
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentView:) name:@"PresentView" object:nil];
    //弹出消息框提示用户有订阅通知消息。主要用于用户在使用应用时,弹出提示框
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showNotification:) name:@"Notification" object:nil];

    所以在AppDelegate的didReceiveRemoteNotification中可以通过判断isLaunchedByNotification来通知不同的展示方法。




  • 相关阅读:
    如何解决MathPage.wll或MathType.dll文件找不到问题
    2-构建模型
    R语言 ur.df函数(2)
    平稳过程趋势项变点的 CUSUV 检验 秦瑞兵,郭娟
    时间序列的弱相依与强相依
    Cent OS|使用httpd发布网页
    C++练习 | 基于栈的中缀算术表达式求值(double类型
    C++练习 | 不使用头插法逆转单链表
    C++练习 | 单链表的创建与输出(结构体格式)
    C++练习 | 最长公共字符串(DP)
  • 原文地址:https://www.cnblogs.com/csdnIOS/p/4972201.html
Copyright © 2011-2022 走看看