【发布时间】: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