通用链接:如何以编程方式返回?
Posted
技术标签:
【中文标题】通用链接:如何以编程方式返回?【英文标题】:Universal links: how to go back programmatically? 【发布时间】:2018-05-30 19:16:24 【问题描述】:我有一个第一个 ios 原生应用程序(假设是“调用者应用程序”),它会打开第二个(假设是“被调用者应用程序”),其 URL 格式为 https://calleeapp.com
(通用链接)。我希望用户在“被调用者应用程序”中执行一些任务,完成后我想自动返回到“调用者应用程序”,提供此类任务的结果(URL 将是类似于https://callerapp.com/check?result=xxxx
)。
处理此问题的最佳/适当方法应该是什么?
【问题讨论】:
【参考方案1】:我们会,您需要能够在被调用方和调用方应用程序上都有代码,然后才能执行此操作。 (除非第三方应用为回调 URL 实现了某种 API)。
在调用者应用上,尽管您希望查看以下 AppDelegate 方法:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool
// if it opened the app from some link
if userActivity.activityType == NSUserActivityTypeBrowsingWeb
// the query will give you "result=xxxx"
if let query = userActivity.webpageURL?.query
// code that pulls out the result from the string you get back
...
您还必须确保您的AppName.entitlements
具有关联域键,其中一个值为applinks:callerapp.com
,以便调用者应用知道它可以在该方案中打开网址,从而真正支持通用链接。 (反之亦然,如果你也实现了被调用者应用程序)
【讨论】:
谢谢。那么,这是否意味着我需要从调用者应用程序调用openURL:
以“返回”到调用者应用程序?那么它不会像“导航回来”,而是像打开调用者应用程序“内部”被调用者应用程序一样?然后完整的流程就像:调用者应用程序->在内部打开被调用者应用程序(因此应用程序“在”应用程序中)->被调用者应用程序在内部打开调用者应用程序(因此应用程序“内部”也是“内部”的应用程序应用程序)?
对,你可以打电话给openURL:
(很确定),除了注意它不是在应用程序“内部”打开它,它实际上只是导航到那个应用程序,而原始应用程序是后台的跨度>
所以调用者应用程序无法控制在被调用者应用程序上执行的代码,除非您能够为两者编写代码,或者,就像我说的,有某种接口可以提供一次回调 URL您在被调用方应用上执行的任何操作都已完成
有什么方法可以返回到调用者应用程序,而不是调用openURL:
?我想要相同的行为,就像用户点击“后退按钮”时显示在顶部的调用方应用程序名称,然后在再次显示调用方应用程序时没有这样的“后退按钮”。但我想调用openURL:
会在顶部显示“后退按钮”,但当时显示的是被调用者应用程序名称,对吧?
我不知道有什么方法可以在不涉及打开 url 的应用程序之间切换。只要您在关联域中注册,您就可以使用特定于应用程序的 url(如 facebook 的 fb://...
)或通用链接。出现在顶部的后退按钮就像你无法控制的 Apple 级别的系统东西,Apple 不允许在另一个应用程序上执行代码。一旦调用者应用程序打开被调用者应用程序,它就不知道那里发生了什么,除非被调用者应用程序决定打开调用者应用程序。是的,一旦您返回,被调用者应用程序可能会显示在顶部。以上是关于通用链接:如何以编程方式返回?的主要内容,如果未能解决你的问题,请参考以下文章
如何制作以编程方式使用 UISplitViewController 和 UINavigationController 的通用 iPhone / iPad 应用程序?