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

标签 ios swift url-scheme

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

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: failed for URL: "amzn://" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"

我已将 url 方案添加到 Info.plist 中的 LSApplicationQueriesSchemes,但这没有改变任何内容:

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

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

最佳答案

上面的答案确实对我有帮助,但它给了我好坏参半的结果。

由于某种原因,使用 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 步。就我而言,我需要在 Amazon 上打开特定产品并获取 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)
   }

}

关于ios - 如何从我的应用程序中打开亚马逊应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52756003/

相关文章:

ios - 如何在 ios safari 上禁用支持通用链接的页面的 "open in app"横幅?

ios - 如何快速将相机 View 扩展到全屏 - UIImagePickerController

ios - 在我滚动之前 UICollectionView 没有完全加载

ios - 泛型类类型不符合 Any

用户取消后,iOS Safari 不识别 url 方案

ios - 通过自定义 URL 方案在接收应用程序中运行一些代码

ios - xCode 6 无法为应用程序的存档(仅)构建找到匹配的签名 Assets

iOS UIPanGestureRecognizer 防止滚动

ios - 如何使用@IBAction 函数和观察者更改按钮上的图像

javascript - 重定向到 iTunes 链接时如何避免 Safari 警报