iOS:当我单击推送通知时如何打开应用程序的特定页面

时间:2018-06-27 09:29:39

标签: javascript ios javascript-events push-notification apple-push-notifications

我正在开发一个可以接收推送通知的IOS应用。收到我的应用程序后,可以打开它的特定页面并单击通知吗?

3 个答案:

答案 0 :(得分:1)

是的,这是可能的,并且它是名为“深层链接”的“事物”的一部分。 基本上,这个想法是设计您的项目,在该项目中,每个视图控制器都将使用URL方案进行映射(是的,是字符串对象)。 这样,您就可以在applicationDidFinish中知道哪个viewcontroller代表哪个URL方案。 现在,通过viewController的URL方案在推送通知中发送数据,您希望显示数据。在方法中编写代码以解析并推送该特定控制器。这是关于如何/应该如何工作的基本粗略概念,我可能会漏掉一些细节,但是here是一篇不错的文章和教程,如果您想看的话。

希望这会有所帮助

答案 1 :(得分:0)

我们的应用程序可以做到这一点,老实说,这真是麻烦。但是,这是我们的处理方式:

  1. 具有一个根视图控制器来处理所有传入的通知(通常通过某种数据源或管理器类)
  2. 创建一个模型对象来表示您的通知,并确保它具有type属性。
  3. 创建一个typedef enum来存储您的应用程序预期会收到的各种通知。
  4. 根视图控制器应实现带有switch语句的方法,该方法可以打开要处理的通知的类型。
  5. 然后,根视图控制器可以为您的通知加载正确的视图控制器,因此,如果需要使用其中包含的任何信息,则可以将通知对象传递给视图控制器。

这是基本概述,您需要根据其复杂程度进行调整以适合您的导航堆栈。可能您需要将该通知对象向下传递到视图层次结构中的视图级别(我们必须这样做)。

根据应用程序的行为,您可能还需要考虑应用程序如何处理从后台返回到前台的情况,即,当应用程序收到通知时它处于什么状态,并在适当的情况下重置导航堆栈,以便进行导航堆栈反应正确。

答案 2 :(得分:-1)

每当用户点击通知时,您将在“ didReceiveRemoteNotification”中接收控制。

 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController = storyboard.instantiateViewControllerWithIdentifier("DetailViewController") as! DetailViewController
    self.window?.rootViewController?.presentViewController(navigationController, animated: true, completion: {}) 
 }

在这里您还可以检测应用程序处于活动状态还是非活动状态,并相应地执行演示。

因此获取rootViewController并显示您需要显示的屏幕。 同样,如果需要将控制器推入已经显示的导航堆栈中,则可以从窗口中获取导航控制器,然后将特定的控制器推入其上方。 可以从收到的userInfo中做出显示需要显示的控制器的决定。

这样,您可以打开所需的任何特定控制器。