Urls无法使用添加的url方案打开

时间:2019-07-10 14:39:19

标签: swift google-chrome url plist

我想用Google Chrome打开网址。如果我将网址前缀替换为“ googlechrome://”(ergo google chrome打开网址),则此方法就很好。

但是,我也确实想检查是否已使用“ canOpenUrl”方法为其安装了chrome,我再次了解到我需要确保已添加相应的网址方案。到目前为止,我已经在我的plist的url方案中添加了“ googlechrome”和“ googlechromes”,并且“ canOpenUrl”方法返回为true。但是什么也没发生,谷歌浏览器无法打开。有什么明显的我想念的吗?

此代码可以正常工作,只要打开我的Chrome浏览器,我的plist中就没有任何url方案,那么它就会打开:

if let googleUrl = URL(string: "googlechrome" + "\(urlString.replaceStringPrefix())") {
    print("openUrl, googleUrl: ", googleUrl)
    UIApplication.shared.open(googleUrl, options: [:])
}

以下对于带有相应plist条目的canOpenUrl返回true,但是什么也没有发生,Google chrome无法打开:

<key>CFBundleURLSchemes</key>
    <array>
        <string>googlechrome</string>
        <string>googlechromes</string>
        <string>googlechrome-x-callback</string>
    </array>



if let googleUrl = URL(string: "googlechrome" + "\(urlString.replaceStringPrefix())") {
     print("openUrl, googleUrl: ", googleUrl)
     if UIApplication.shared.canOpenURL(googleUrl) {
           print("Can open url with Chrome, url: ", googleUrl)
           UIApplication.shared.open(googleUrl, options: [:])
     } else {
           print("Cannot open url with Chrome, falling back to Safari")
           if let safariUrl = URL(string: urlString) {
                UIApplication.shared.open(safariUrl, options: [:])
           }
     }
 }

1 个答案:

答案 0 :(得分:0)

找到了罪魁祸首。 canOpenUrl将在上面的plist条目中返回true,在各个应用中实际打开的正确密钥是LSApplicationQueriesSchemes,其结果是:

        <key>LSApplicationQueriesSchemes</key>
        <array>
            <string>googlechrome</string>
            <string>googlechromes</string>
            <string>googlechrome-x-callback</string>
        </array>