【问题标题】:How to NOT handle some Universal Links programmatically?如何不以编程方式处理一些通用链接?
【发布时间】:2019-10-03 11:02:04
【问题描述】:

我的 iOS 应用程序处理 universal links 以将 Safari 用户重定向到我的应用程序。到目前为止,一切都运行良好,如果用户从 Google 点按指向我的网站的链接,我的应用将打开,而不是像这样打开我的网站:

from safari https://my-web-site.com -> my-app

但是我的应用程序没有实现我的网站所具备的某些功能,所以我想以编程方式拒绝一些 URL 并让我的用户在 safari 上而不是在我的应用程序中重定向他,如下所示:

from safari https://my-web-site.com -> my-app

from safari https://my-web-site.com?reject -> safari

根据Apple documentation,这应该是可能的:

请务必了解,如果您的应用使用 openURL: 打开指向您网站的通用链接,则该链接不会在您的应用中打开。在这种情况下,iOS 会识别出调用来自您的应用,因此您的应用不应将其作为通用链接处理。

不幸的是,这不是附加的内容,而是我的用户没有留在 safari 中,而是在短时间内重定向到我的应用程序,然后再次重定向到 safari,如下所示:

from safari https://my-web-site.com?reject -> my-app (briefly) -> safari

这是我的 AppDelegate.swift 代码:

internal func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard let url = userActivity.webpageURL else { return false }
    guard let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true) else { return false }

    let params = urlComponents.queryItems ?? []

    if params.contains(where: { $0.name == "reject" }) {
        // This line should prevent the app from opening according to Apple's documentation 
        application.open(url)
        return false
    } else {
        return true
    }
}

所以任何人都知道我如何按照 Apple 文档中描述的方式拒绝通用链接?

注意:拒绝通用链接需要由应用程序根据本地存储的数据以编程方式完成。因此,在我的情况下,在 apple-app-site-association 文件中添加路径异常不是一种选择

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "XXXXXXXXX.com.my-app",
        "paths": [
          "*",
        "NOT /reject"
        ]
      }
    ]
  }
}

【问题讨论】:

    标签: ios swift safari appdelegate ios-universal-links


    【解决方案1】:

    如果您在路径数组中的条目前面加上"NOT",那么您可以显式阻止匹配。因此,在您的示例中,您可以执行类似

    的操作
    ["NOT /settings/*", "NOT /activity/*", "/*"] 
    

    这将阻止带有 /settings/activity 前缀的路径,然后匹配其他所有内容。


    Reference

    【讨论】:

    • 感谢您的回答,但我需要在应用程序中以编程方式进行。我的应用需要根据本地存储的数据动态处理或拒绝某些 URL。
    • 我不认为这是可能的编程方式
    • @JulienBaillon 这个由操作系统控制,所以这是正确操作它的唯一方法。
    • Apple 很清楚,在我的情况下,该应用程序不应该打开:"It’s important to understand that if your app uses openURL: to open a universal link to your website, the link does not open in your app." 所以应该有可能......
    • @JulienBaillon 不,您在谈论的是您的应用程序无法调用 openURL 并通过一些 url 引导回您的应用程序。您的应用程序只能指向另一个应用程序或浏览器。这就是那些话的意思。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多