我的应用程序最近被亚马逊移动应用程序分发门户拒绝,理由是菜单->"为应用程序评分"选项重定向到谷歌Play商店。
为了被接受,它应该重定向到亚马逊应用商店,下载URL必须http://www.amazon.com/gp/mas/dl/android?p=packagename这当然是有道理的。
所以我需要这样的东西:
String url = isKindle
? "http://www.amazon.com/gp/mas/dl/android?p=packagename"
: "https://play.google.com/store/apps/details?id=packagename";
问题是:我如何区分该应用程序是在Kindle Fire上运行还是在"原生"安卓系统上运行?
您可以阅读以下内容:
android.os.Build.MANUFACTURER
android.os.Build.MODEL
在Kindle Fire上,这些返回值为"Amazon"one_answers"Kindle Fire"。
http://developer.android.com/reference/android/os/Build.html
这应该足以让你的应用程序确定它在Kindle Fire上运行。
更新:
以上作品适用于第1代Kindle Fire。
较新型号的Kindle Fire对android.os.Build.MODEL.有不同的价值
https://developer.amazon.com/sdk/fire/specifications.html
好消息!显然,亚马逊商店的最新版本最终将PackageManager.getInstallerPackageName()
设置为"com.amazon.venezia"
,以与Google Play的"com.android.vending"
形成对比。
较旧的应用程序仍将返回null
,并且我还没有实际验证API,也没有验证安装新应用商店然后升级较旧的程序是否会设置安装程序。但是安装新的应用程序并检查/data/system/packages.xml
表明installer
设置正确。
请确保更新Build.MODEL检查以处理新的Kindle Fire设备。
- KFOT=Kindle Fire
- KFTT=Kindle Fire HD 7"
- KFJWI=Kindle Fire HD 8.9"Wi-Fi
- KFJWA=Kindle Fire HD 8.9"广域网
这些列在图表底部的https://developer.amazon.com/sdk/fire/specifications.html
检测Kindle Fire是解决方案的一部分,但不是整个解决方案。这个帖子中的(当前)最后一篇帖子似乎触及了"这是从亚马逊商店安装的吗"的核心——这很可能是Kindle Fire,也可能不是!
<snip,略有编辑>
确定应用程序是否在生产模式下通过Appstore安装的正确方法是使用onSdkAvailable(boolean isSandboxMode)
方法。
onSdkAvailable(boolean isSandboxMode)方法的文档。摘要:
- 一旦您向
PurchasingManager
注册PurchasingObserver
,就会调用此回调 - 此方法告诉您Purchasing Framework是在带有测试数据的沙箱模式下运行,还是在带有真实数据的生产模式下运行
- 如果您的应用程序是通过亚马逊客户端下载的,
isSandboxMode
将返回false - 启动方法应在
onStart()
生命周期方法中调用
在注册PurchaseObserver
时,您会得到一个异步回调onSdkAvailable(Boolean isSanboxMode)
。如果应用程序是通过亚马逊客户端下载的,那么isSandboxMode
将始终返回false。此代码将在生产模式下成功工作,但在开发/测试环境中,isSandboxMode将始终返回true,因为应用程序在测试环境中未通过亚马逊客户端下载。
我只想创建两个应用程序。一个适用于Android。一个适用于Kindle。
您可以包含一个指向通用网页的链接,然后网页可以将流量重定向到亚马逊应用商店或谷歌播放。
例如,你可以包含链接www.yourwebsite.com/getapp,然后将流量重定向到Google Play或亚马逊。
亚马逊不太可能接受谷歌播放链接,即使背后有逻辑。
实际上,您可以完全跳过检查,只需链接到market://details?id=packagename