通用链接:如何以编程方式返回?

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 不允许在另一个应用程序上执行代码。一旦调用者应用程序打开被调用者应用程序,它就不知道那里发生了什么,除非被调用者应用程序决定打开调用者应用程序。是的,一旦您返回,被调用者应用程序可能会显示在顶部。

以上是关于通用链接:如何以编程方式返回?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式获取 iOS 设备 MAC 地址

如何制作以编程方式使用 UISplitViewController 和 UINavigationController 的通用 iPhone / iPad 应用程序?

如何以编程方式为处于触摸状态的 UIButton 创建灰色叠加层?

如何使用 HTMLElement 以编程方式单击链接元素?

快速以编程方式创建后如何在情节提要中链接 UIButton

以编程方式获取链接速度?