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

我最近从亚马逊移动应用程序分发门户网站拒绝了我的应用程序,并声称菜单 – >“评价应用程序”选项redirect到Google Play商店。

为了被接受,它应该redirect到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,或者安装新的商店,然后升级旧的应用程序将设置安装程序。 但是,安装一个新的应用程序并检查/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

这些在https://developer.amazon.com/sdk/fire/specifications.html图表的底部列出

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

稍微编辑一下

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

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

  • 使用PurchasingManager注册您的PurchasingObserver ,将调用此callback
  • 此方法将告诉您,采购框架是以沙盒模式运行的testing数据,还是以具有实际数据的生产模式运行
  • 如果您的应用程序是通过Amazon客户端下载的,则isSandboxMode将返回false
  • 应该在onStart()生命周期方法中调用启动方法

在注册您的PurchaseObserver ,您会得到一个asynchronouscallback, onSdkAvailable(Boolean isSanboxMode) 。 如果应用程序通过Amazon客户端下载,则isSandboxMode将始终返回false。 此代码将在生产模式下成功运行,但是在开发/testing环境中,isSandboxMode将始终返回true,因为应用程序未在testing环境中通过Amazon Client进行downlaoded。

我只会创build2个应用程序。 一个为Android。 一个用于Kindle。

您可以包含指向一般网页的链接,然后该网页可以将stream量redirect到Amazon AppStore或Google Play。

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

亚马逊不太可能接受Google Play链接,即使有逻辑背后。

其实你可以跳过这个检查,只需链接到market:// details?id = packagename