如何区分Android应用程序是否在亚马逊Kindle Fire上运行?

我最近从亚马逊移动应用程序分发门户网站上拒绝了我的应用程序,其中包含菜单 – >“评估应用程序”选项重定向到Google Play商店。

为了被接受,它应该重定向到Amazon Appstore,下载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系统上运行?

你可以阅读这些:

 android.os.Build.MANUFACTURER android.os.Build.MODEL 

在Kindle Fire上,这些值会返回’亚马逊’和’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 ,我实际上并未validationAPI或是否安装新的Store然后升级旧应用程序将设置安装程序。 但是安装新的应用程序并检查/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“WAN

它们列在图表底部, url为https://developer.amazon.com/sdk/fire/specifications.html

检测Kindle Fire是解决方案的一部分,但不是整个解决方案。 这个post中的(当前)最后一篇post似乎到了“这是从亚马逊商店安装”的核心 – 这可能是一个Kindle Fire,或者不是!

确定应用程序是否在生产模式下通过Appstore安装的正确方法是使用onSdkAvailable(boolean isSandboxMode)方法。

有关onSdkAvailable(boolean isSandboxMode)方法的文档。 抽象:

  • 一旦您使用PurchasingManager注册PurchasingObserver ,就会调用此回调
  • 此方法告诉您采购框架是在沙箱模式下运行测试数据,还是在生产模式下运行实际数据
  • 如果您的应用程序是通过Amazon Client下载的,则isSandboxMode将返回false
  • 应该在onStart()生命周期方法中调用启动方法

在注册PurchaseObserver ,您将获得异步回调, onSdkAvailable(Boolean isSanboxMode) 。 如果通过Amazon Client下载应用程序,则isSandboxMode将始终返回false。 此代码将在生产模式下成功运行,但在开发/测试环境中,isSandboxMode将始终返回true,因为应用程序未通过测试环境中的Amazon Client进行下载。

我只想创建2个应用程序。 一个用于Android。 一个用于Kindle。

您可以包含指向常规网页的链接,然后该网页可以将流量重定向到Amazon AppStore或Google Play。

例如,您可以添加链接www.yourwebsite.com/getapp,然后将流量重定向到Google Play或Amazon。

亚马逊不太可能接受谷歌播放链接,即使背后有逻辑。

实际上你可以完全跳过检查,只链接到market:// details?id = packagename