【问题标题】: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 应用是否已打开?

【问题讨论】:

    标签: ios swift wkwebview ios-universal-links wknavigationdelegate


    【解决方案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 正常工作。 LSApplicationQueriesSchemessome_cheme
    • @Season 哦,我完全忘记提到了,谢谢提醒。我会更新我的答案。
    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多