如何从我的应用程序中打开亚马逊应用程序?
How to open Amazon app from within my app?
我正在尝试使用以下代码从我的应用程序中打开亚马逊应用程序:
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.)"
我在 Info.plist
中向 LSApplicationQueriesSchemes
添加了 url 方案,但这没有任何改变:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>amzn</string>
</array>
更奇怪的是,它甚至没有打开回退 URL - 我希望如果 canOpen
失败,第二个分支会工作。
因为 iOS 9 具有通用 links,你应该 link 到正常的 URL 并且如果该应用程序安装在该人的设备上,则亚马逊应用程序会拦截它。另见 Universal Links to Amazon。
所以经过更多的研究,基于https://www.appsight.io,亚马逊应用程序似乎没有使用"amzn://"
url方案,而是"amazonToAlipay://"
。将其更改为此后,UIApplication.shared
打开亚马逊应用程序。
感谢@LinusGeffarth 和另一个相关问题。
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/
以上答案确实对我有帮助,但它给了我不同的结果。
出于某种原因,使用 amazonToAlipay:// 没有让我找到想要的产品。
使用通用链接,虽然它们在理论上应该有效,但给了我不同的结果。在安装了亚马逊应用程序的某些设备上,亚马逊应用程序可以正常打开,但在其他设备上,即使安装了亚马逊应用程序,它也会在 Safari 中打开。
这可能是因为设备类型、iOS 版本或其他原因,请查看。
因此,作为变通方法,以下给了我最好的结果。
按照 Milan 的建议使用 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)
}
}
我正在尝试使用以下代码从我的应用程序中打开亚马逊应用程序:
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.)"
我在 Info.plist
中向 LSApplicationQueriesSchemes
添加了 url 方案,但这没有任何改变:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>amzn</string>
</array>
更奇怪的是,它甚至没有打开回退 URL - 我希望如果 canOpen
失败,第二个分支会工作。
因为 iOS 9 具有通用 links,你应该 link 到正常的 URL 并且如果该应用程序安装在该人的设备上,则亚马逊应用程序会拦截它。另见 Universal Links to Amazon。
所以经过更多的研究,基于https://www.appsight.io,亚马逊应用程序似乎没有使用"amzn://"
url方案,而是"amazonToAlipay://"
。将其更改为此后,UIApplication.shared
打开亚马逊应用程序。
感谢@LinusGeffarth 和
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/
以上答案确实对我有帮助,但它给了我不同的结果。
出于某种原因,使用 amazonToAlipay:// 没有让我找到想要的产品。
使用通用链接,虽然它们在理论上应该有效,但给了我不同的结果。在安装了亚马逊应用程序的某些设备上,亚马逊应用程序可以正常打开,但在其他设备上,即使安装了亚马逊应用程序,它也会在 Safari 中打开。
这可能是因为设备类型、iOS 版本或其他原因,请查看。
因此,作为变通方法,以下给了我最好的结果。
按照 Milan 的建议使用 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)
}
}