【问题标题】:How to open Amazon app from within my app?如何从我的应用程序中打开亚马逊应用程序?
【发布时间】:2019-03-16 07:07:03
【问题描述】:

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

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.)"

我已在Info.plist 中将 url 方案添加到 LSApplicationQueriesSchemes,但这并没有改变:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>amzn</string>
</array>

更奇怪的是,它甚至没有打开后备 URL - 我希望如果 canOpen 失败,第二个分支会起作用。

【问题讨论】:

标签: ios swift url-scheme


【解决方案1】:

所以经过更多研究,基于https://www.appsight.io,亚马逊应用似乎没有使用"amzn://" url 方案,而是"amazonToAlipay://"。将其更改为此后,UIApplication.shared 将打开亚马逊应用程序。

感谢@LinusGeffarth 和his answer 提出另一个相关问题。

【讨论】:

    【解决方案2】:

    以上答案确实对我有所帮助,但结果好坏参半。

    由于某种原因,使用 amazonToAlipay:// 并没有让我获得所需的产品。

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

    这可能是由于设备类型、iOS 版本或其他原因,请自行判断。

    因此,作为一种解决方法,以下给了我最好的结果。

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

    com.amazon.mobile.shopping
    

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

    <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 步。尝试打开亚马逊应用 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)
       }
    
    }
    

    【讨论】:

      【解决方案3】:

      由于 iOS 9 带有通用链接,您应该只链接到正常的 URL,如果该应用程序安装在该人的设备上,亚马逊应用程序将拦截它。另见Universal Links to Amazon。

      【讨论】:

      • 当我尝试直接打开链接 "https://www.amazon.com" 时,它只会打开带有亚马逊网站的 safari - 我在设备上安装了亚马逊应用程序。
      • 与其他一些应用程序一起玩,似乎对某些应用程序有效(例如,twitter 或 facebook),而对某些无效,我必须使用 url 方案(例如,snapchat 和 amazon - 其中正如问题所述,我无法使用该方案开始工作)
      • 您是否检查了此处提到的页面顶部的横幅:stackoverflow.com/a/35614651/10485169?
      • 是的,没有横幅.. 横幅出现在 snapchat 中,但这不起作用,因为我希望它起作用 - 我不希望用户点击两次,而应该只是“一键式”方式..
      • 是的,一键点击即可使用通用链接,正如您在 Twitter 上看到的那样。机制是一样的。您可以在其他设备上尝试,还是删除亚马逊应用并重新安装?
      【解决方案4】:
          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)
          }
      

      如果安装了亚马逊应用程序,它应该会通过通用链接自动打开。 https://developer.apple.com/ios/universal-links/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-30
        • 2017-01-14
        • 1970-01-01
        • 2016-04-03
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多