开发者社区> 问答> 正文

iOS用户点击推送消息进入应用后,如何跳转到对应的ViewController

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

  • (BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions
    方法中,我们可以通过

[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
获得推送的userinfo.
但是didFinishLaunchingWithOptions会比MainViewController的viewDidLoad先执行,此时肯定不能present一个新的View,应该是让MainViewController启动后再检查是否收到了推送,然后打开对应的视图

想跟大家讨论一下通用做法。谢谢!

展开
收起
a123456678 2016-07-27 16:14:52 3188 0
1 条回答
写回答
取消 提交回答
  • 我来说说我的方法吧!
    当用户通过点击通知消息进入应用时

    • (BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions
      launchOptions中会有推送消息的userInfo信息,此时我们可以通过

    NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    获得推送消息内容。如果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来通知不同的展示方法。

    2019-07-17 20:00:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载