我们目前正在尝试实现通用链接,以便在我们的核心 iOS 应用程序之间导航用户,但最近遇到了困难,这让我很困惑。
App 1 是一款 iOS 应用程序,它向用户呈现基于 WebView 的仪表板,其中包含从子域传递的内容(例如
https://dashboard.domain.com/
)
当用户点击仪表板中 Web 内容中的按钮时,应用程序会向另一个子域和路径发出 url 请求(例如。
https://breakout.domain.com/go?foo=bar
)
此 URL 已注册为通用链接,应打开目标 iOS 应用程序 - App 2。问题是它最终会打开设备浏览器并尝试加载 url。
我们在
apple-app-site-association
托管了一个 https://breakout.domain.com/.well-known/
文件,并已在其中正确声明了路径和应用程序特定信息,并在 App 2的权利中注册了
applinks:breakout.domain.com
域。
此外,我们知道我们的实现和配置是合理的,因为我们可以通过其他可测试的方式可靠地触发通用链接 URL(打开App 2)。
但是,当通用链接请求发起者源自上面第二段中提到的 App 1 的 WebView 时 - iOS 无法拦截 url 请求并将其视为任何其他 Web 链接。
我的第一个想法是 iOS 将启动器域视为与通用链接域相同。
然而,Apple 文档here 指出,使用子域应满足以下规则:网络请求不得源自与通用链接相同的域,以便触发拦截并打开目标应用程序。
因此,为了测试这一点,我们更改了仪表板上的按钮,以调用在不同顶级域(例如
https://breakout.new-domain.com/go?foo=bar
)之外运行的新通用链接,你知道吗 - 它有效。 应用程序2打开成功。
所以我想我的问题是,以前有其他人遇到过这个特定问题吗?我非常想知道一种解决方法(如果存在),它不需要我们使用唯一的顶级域来提供App 1和App 2之间的通用链接的功能。
通用链接仅适用于内置 iOS 应用程序,例如 Safari 和消息。 Web 视图不支持通用链接。