如何从我的应用程序中打开Amazon应用程序?

时间:2018-10-11 08:52:00

标签: ios swift url-scheme

我正在尝试使用以下代码从我的应用程序中打开Amazon应用程序:

if let url = URL(string: "amzn://"),
    UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else if let url = URL(string: "https://www.amazon.com") {
    // fallback
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

当我将其用于Youtube应用程序时,这就像一种魅力。但是,现在有了Amazon,它在报告此错误时只是默默地失败:

  

2018-10-11 10:38:09.794370 + 0200 App [9739:3023026] -canOpenURL:URL:“ amzn://”失败-错误:“该操作无法完成。(OSStatus错误- 10814。)”

我在LSApplicationQueriesSchemes的{​​{1}}中添加了url方案,但这没有任何改变:

Info.plist

更奇怪的是,它甚至没有打开备用URL-我希望如果<key>LSApplicationQueriesSchemes</key> <array> <string>amzn</string> </array> 失败,第二个分支也会起作用。

4 个答案:

答案 0 :(得分:0)

由于iOS 9具有通用链接,因此您应该仅链接到普通URL,如果该应用程序安装在该人的设备上,那么亚马逊应用程序将对其进行拦截。另请参见Universal Links to Amazon

答案 1 :(得分:0)

因此,经过进一步研究,基于https://www.appsight.io,亚马逊应用似乎未使用"amzn://"网址方案,而是使用"amazonToAlipay://"。将其更改为此后,UIApplication.shared将打开Amazon应用程序。

感谢@LinusGeffarth,his answer感谢另一个相关问题。

答案 2 :(得分:0)

    guard let url = URL(string: "https://www.amazon.com") else {return}

    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(url)
    }

如果已安装Amazon应用程序,则应通过通用链接自动打开。 https://developer.apple.com/ios/universal-links/

答案 3 :(得分:0)

上述答案确实对我有帮助,但它给了我不同的结果。

由于某种原因,使用 amazonToAlipay:// 并没有让我达到想要的产品。

使用通用链接虽然理论上应该有效,但给了我不同的结果。在某些安装了 amazon 应用程序的设备上,amazon 应用程序打开没有问题,但在其他设备上,即使安装了亚马逊应用程序,它也可以在 Safari 中打开。

这可能是因为设备类型、iOS 版本或其他原因,请看图。

作为一种变通方法,以下给了我最好的结果。

按照米兰的建议使用 https://www.appsight.io/app/amazon,我使用了那里提到的以下方案:

com.amazon.mobile.shopping

第 1 步。通过添加以下内容,将此 URL 方案列入您的 info.Plist 白名单

<key>LSApplicationQueriesSchemes</key>
<array>
   <string>com.amazon.mobile.shopping</string>
</array>

第 2 步。就我而言,我需要在亚马逊上打开特定产品并获取 URL 中存在的产品 ID,然后按以下格式构建您的字符串:

com.amazon.mobile.shopping://www.amazon.com/products/{your-product-id}/

第 3 步。尝试打开 amazon 应用程序 url,但也处理可能未安装应用程序的情况

func openAmazonProduct(withId id: String) {

   guard let amazonWebURL = URL(string: "https://amzn.to/2MQC8Bz"),
         let amazonAppURL = URL(string: "com.amazon.mobile.shopping://www.amazon.com/products/\(id)/") else {
             return
   }
        
   if UIApplication.shared.canOpenURL(amazonAppURL) {
            UIApplication.shared.open(amazonAppURL, options: [:], completionHandler: nil)
   }
   else if UIApplication.shared.canOpenURL(amazonWebURL) {
            UIApplication.shared.open(amazonWebURL, options: [:], completionHandler: nil)
   }

}