单击推送通知时如何打开应用程序的特定页面
Posted
技术标签:
【中文标题】单击推送通知时如何打开应用程序的特定页面【英文标题】:How to open a specific page of the app when I click on a push notification 【发布时间】:2018-06-27 09:29:38 【问题描述】:我正在开发一个接收推送通知的 ios 应用程序。当我收到并点击通知时,是否可以打开我的应用的特定页面?
【问题讨论】:
你有一个很好的教程here 【参考方案1】:是的,这是可能的,它是称为深度链接的“事物”的一部分。
基本上,这个想法是构建您的项目,其中每个视图控制器都将使用 URL-Scheme 进行映射(是的,那个字符串的东西)。
这样在applicationDidFinish
中你就知道哪个视图控制器代表哪个 URL-Scheme。
现在在推送通知中发送数据以及 viewController 的 URL-Scheme,您希望显示数据。在方法中编写代码以解析和推送该特定控制器。这是它应该/应该如何工作的基本粗略想法,我可能错过了一些细节,但here 是一篇很好的文章和教程,如果你想了解的话。
希望对你有帮助
【讨论】:
很好的插图。 :)【参考方案2】:我们的应用程序做到了这一点,老实说,这很让人头疼。但我们是这样做的:
-
拥有处理所有传入通知的根视图控制器(通常通过某种数据源或管理器类)
创建一个模型对象来表示您的通知,并确保它具有
type
属性。
创建一个typedef enum
来存储您的应用可能会收到的不同类型的通知。
根视图控制器应实现一个带有 switch 语句的方法,该语句用于切换正在处理的通知类型。
然后根视图控制器可以为您的通知加载正确的视图控制器,因此如果您需要使用其中包含的任何信息,您可以将通知对象传递给视图控制器。
这是一个基本概述,您需要根据导航堆栈的复杂程度对其进行调整以适应您的导航堆栈。您可能需要将该通知对象向下传递到视图层次结构中的视图级别(正如我们必须做的那样)。
根据您的应用程序的行为方式,您可能还需要考虑您的应用程序如何处理从后台返回到前台,即当应用程序收到通知时它处于什么状态,并在适当的地方重置您的导航堆栈,以便您的导航堆栈反应正确。
【讨论】:
【参考方案3】:每当用户点击通知时,您都会在“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 来决定是否显示您需要展示的控制器。
这样你可以打开任何你想要的特定控制器。
【讨论】:
以上是关于单击推送通知时如何打开应用程序的特定页面的主要内容,如果未能解决你的问题,请参考以下文章
Phonegap 推送插件。单击通知后打开特定的应用程序视图