【发布时间】:2018-06-27 09:29:38
【问题描述】:
我正在开发一个接收推送通知的 IOS 应用程序。当我收到并点击通知时,是否可以打开我的应用的特定页面?
【问题讨论】:
-
你有一个很好的教程here
标签: javascript ios push-notification apple-push-notifications dom-events
我正在开发一个接收推送通知的 IOS 应用程序。当我收到并点击通知时,是否可以打开我的应用的特定页面?
【问题讨论】:
标签: javascript ios push-notification apple-push-notifications dom-events
是的,这是可能的,它是称为深度链接的“事物”的一部分。
基本上,这个想法是构建您的项目,其中每个视图控制器都将使用 URL-Scheme 进行映射(是的,那个字符串的东西)。
这样在applicationDidFinish 中你就知道哪个视图控制器代表哪个 URL-Scheme。
现在在推送通知中发送数据以及 viewController 的 URL-Scheme,您希望显示数据。在方法中编写代码以解析和推送该特定控制器。这是它应该/应该如何工作的基本粗略想法,我可能错过了一些细节,但here 是一篇很好的文章和教程,如果你想了解的话。
希望对你有帮助
【讨论】:
我们的应用程序做到了这一点,老实说,这很让人头疼。但我们是这样做的:
type 属性。typedef enum 来存储您的应用可能会收到的不同类型的通知。这是一个基本概述,您需要根据导航堆栈的复杂程度对其进行调整以适应您的导航堆栈。您可能需要将该通知对象向下传递到视图层次结构中的视图级别(正如我们必须做的那样)。
根据您的应用程序的行为方式,您可能还需要考虑您的应用程序如何处理从后台返回到前台,即当应用程序收到通知时它处于什么状态,并在适当的地方重置您的导航堆栈,以便您的导航堆栈反应正确。
【讨论】:
每当用户点击通知时,您都会在“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 来决定是否显示您需要展示的控制器。
这样你可以打开任何你想要的特定控制器。
【讨论】: