当在 WKWebView 中加载链接时,我如何知道外部应用程序是不是会打开?
Posted
技术标签:
【中文标题】当在 WKWebView 中加载链接时,我如何知道外部应用程序是不是会打开?【英文标题】:How can I know if external app will be open or not when a link is loaded in WKWebView?当在 WKWebView 中加载链接时,我如何知道外部应用程序是否会打开? 【发布时间】:2020-05-27 06:44:57 【问题描述】:我有一个 WKWebView,webview 会加载一个类似https://qr.payme.hsbc.com/2/XXXXYYYZZZ 的链接。
链接加载时有两种可能的结果, 案例1是用户安装Payme应用后会打开一个名为Payme的应用; 案例2是当用户没有安装Payme应用时,webview将被重定向到静态页面https://payme.hsbc.com/。
我的问题是如何知道 Payme 应用是否已打开?
【问题讨论】:
【参考方案1】:您可以使用deep linking
或苹果推荐的universal linking
来检查设备中是否安装了应用程序。使用deep linking
,您需要做的是获取应用程序已添加的应用程序架构。并且您可以检查是否可以像打开任何其他类型的 URL 一样打开架构。这是一个例子:
let appSchemeString = "com.myAppScheme://"
let url = URL(string: appSchemeString)!
if UIApplication.shared.canOpenURL(url)
print("App is present")
else
print("App is not")
您需要更新您的info.plist
文件以包含您将在应用程序中打开的方案。你应该附加这个:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>com.myAppScheme</string>
</array>
这是一个完整的 youtube 视频 link 关于这个。 另外,结帐universal-linking。
【讨论】:
我已经尝试过 UIApplication.canOpenURL(),但是链接“qr.payme.hsbc.com”以“https://”开头,这意味着 canOpenURL() 始终为 true,因为有 Safari 浏览器可以打开。 您需要获取我提到的架构。不是网址。 感谢您的指导,看来必须将以下代码添加到 info.plist 中才能使 canOpenURL 正常工作。以上是关于当在 WKWebView 中加载链接时,我如何知道外部应用程序是不是会打开?的主要内容,如果未能解决你的问题,请参考以下文章
在 WKWebView 中加载 safari 或 chrome 中的链接/URL
如何通过 WKWebVIew 或 JSC 在 iOS 应用程序中加载 WebAssembly
如何在 WKWebView 中加载的页面中的隐藏字段中获取值绑定
如果没有在 Swift 中加载 URL,如何使 WKWebView 不可滚动?
为啥我在 iOS13.2 中加载 WKWebView 时收到控制台警告:[Process] kill() 返回意外错误 1?