我正在开发一个可以接收推送通知的IOS应用。收到我的应用程序后,可以打开它的特定页面并单击通知吗?
答案 0 :(得分:1)
是的,这是可能的,并且它是名为“深层链接”的“事物”的一部分。
基本上,这个想法是设计您的项目,在该项目中,每个视图控制器都将使用URL方案进行映射(是的,是字符串对象)。
这样,您就可以在applicationDidFinish
中知道哪个viewcontroller代表哪个URL方案。
现在,通过viewController的URL方案在推送通知中发送数据,您希望显示数据。在方法中编写代码以解析并推送该特定控制器。这是关于如何/应该如何工作的基本粗略概念,我可能会漏掉一些细节,但是here是一篇不错的文章和教程,如果您想看的话。
希望这会有所帮助
答案 1 :(得分:0)
我们的应用程序可以做到这一点,老实说,这真是麻烦。但是,这是我们的处理方式:
type
属性。typedef enum
来存储您的应用程序预期会收到的各种通知。这是基本概述,您需要根据其复杂程度进行调整以适合您的导航堆栈。可能您需要将该通知对象向下传递到视图层次结构中的视图级别(我们必须这样做)。
根据应用程序的行为,您可能还需要考虑应用程序如何处理从后台返回到前台的情况,即,当应用程序收到通知时它处于什么状态,并在适当的情况下重置导航堆栈,以便进行导航堆栈反应正确。
答案 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中做出显示需要显示的控制器的决定。
这样,您可以打开所需的任何特定控制器。