如何不以编程方式处理一些通用链接?
Posted
技术标签:
【中文标题】如何不以编程方式处理一些通用链接?【英文标题】: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"
]
]
【问题讨论】:
【参考方案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 引导回您的应用程序。您的应用程序只能指向另一个应用程序或浏览器。这就是那些话的意思。以上是关于如何不以编程方式处理一些通用链接?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 CheckBox 检查不以编程方式与 Kotlin 一起工作?