代码之家  ›  专栏  ›  技术社区  ›  Milan Nosáľ

如何从我的应用程序中打开亚马逊应用程序?

  •  0
  • Milan Nosáľ  · 技术社区  · 6 年前

    我正在尝试使用以下代码从我的应用程序中打开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)
    }
    

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

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

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

    更奇怪的是,它甚至没有打开回退URL-我想如果 canOpen

    2 回复  |  直到 6 年前
        1
  •  0
  •   Steven Gurr    6 年前
        2
  •  0
  •   Milan Nosáľ    6 年前

    https://www.appsight.io 亚马逊应用程序似乎没有使用 "amzn://" url方案,但是 "amazonToAlipay://" . 改成这个之后 UIApplication.shared 打开亚马逊应用程序。

    感谢@LinusGeffarth和 his answer

        3
  •  0
  •   Gibraltar    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)
        }
    

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

        4
  •  0
  •   Shawn Frank    4 年前

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

    这可能是因为设备类型、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>
    

    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)
       }
    
    }