如何区分 Android 应用程序是不是在 Amazon Kindle Fire 上运行?
Posted
技术标签:
【中文标题】如何区分 Android 应用程序是不是在 Amazon Kindle Fire 上运行?【英文标题】:How to distinguish if the Android app runs on Amazon Kindle Fire?如何区分 Android 应用程序是否在 Amazon Kindle Fire 上运行? 【发布时间】:2012-07-11 14:18:38 【问题描述】:我最近被亚马逊移动应用分发门户拒绝了我的应用,理由是菜单->“评价应用”选项重定向到 Google 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 系统上运行?
【问题讨论】:
我不知道这个问题的答案,但人们通常不只是导出一个单独的 APK 以提交到亚马逊应用商店吗? 【参考方案1】:你可以阅读这些:
android.os.Build.MANUFACTURER
android.os.Build.MODEL
在 Kindle Fire 上,这些返回值“Amazon”和“Kindle Fire”。
http://developer.android.com/reference/android/os/Build.html
这应该足以让您的应用确定它在 Kindle Fire 上运行。
更新:
上述方法适用于第一代 Kindle Fire。
较新型号的 Kindle Fire 具有不同的 android.os.Build.MODEL 值。
https://developer.amazon.com/sdk/fire/specifications.html
【讨论】:
太好了,可以。你知道我在哪里可以看到这些属性的可能值吗? @Ilya:不。我没有这些信息,也不知道它是否在某个地方收集在一起。对不起。 (您当然不是唯一对此感兴趣的应用开发者。) 只是好奇,你为什么确定“在 Kindle Fire 上这些是 'Amazon' 和 'Kindle Fire'”?再次感谢 看到这个问题:***.com/questions/8309624/…【参考方案2】:好消息! Apparently亚马逊商店最新版本终于将PackageManager.getInstallerPackageName()
设置为"com.amazon.venezia"
,与Google Play的"com.android.vending"
形成对比。
较旧的应用程序仍会返回null
,而且我还没有真正验证 API,或者安装新商店然后升级旧应用程序是否会设置安装程序。但是安装新应用并检查/data/system/packages.xml
表明installer
设置正确。
【讨论】:
【参考方案3】:确保更新 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
【讨论】:
在 2013 年末给出这个背景:这些是 第 2 代 代模型 ID,但该链接涵盖了迄今为止的所有内容。【参考方案4】:检测 Kindle Fire 是解决方案的一部分,但不是全部解决方案。 this thread 中的(当前)最后一篇帖子似乎触及了“这是从亚马逊商店安装的”的核心——这很可能是 Kindle Fire,也可能不是!
确定应用程序是否在生产模式下通过 Appstore 安装的正确方法是使用 onSdkAvailable(boolean isSandboxMode)
方法。
onSdkAvailable(boolean isSandboxMode) method 上的文档。摘要:
一旦您将PurchasingObserver
注册到PurchasingManager
,就会调用此回调
此方法告诉您采购框架是在沙盒模式下运行测试数据,还是在生产模式下运行真实数据
如果您的应用是通过亚马逊客户端下载的,isSandboxMode
将返回 false
应该在onStart()
生命周期方法中调用启动方法
在注册您的PurchaseObserver
时,您会收到一个异步回调onSdkAvailable(Boolean isSanboxMode)
。如果应用程序是通过 Amazon 客户端下载的,那么 isSandboxMode
将始终返回 false。此代码将在生产模式下成功运行,但在开发/测试环境中,isSandboxMode 将始终返回 true,因为在测试环境中未通过 Amazon 客户端下载应用程序。
【讨论】:
我认为这只有在您进行应用内购买时才有效?任何想法如何在没有 IAP 的情况下做到这一点? 不,抱歉。虽然我看到一个引用“com.amazon.venezia”的答案,但这将是一个部分解决方案。整个过程很乏味且容易出错:(【参考方案5】:我只会创建 2 个应用程序。一款适用于安卓。 Kindle 一个。
【讨论】:
没有必要,因为斯宾塞的解决方案真的很容易应用。 问题是亚马逊是否会接受它作为解决方案。我猜如果它包含对 Play 商店的引用,他们仍然会拒绝它。例如,如果有人通过 Galaxy Nexus 上的 Amazon Appstore 下载他的应用程序,它将重定向到通过 Play 进行评分。他应该保留 2 个版本。 是的,也不是。您必须记住的是,仅仅因为它是一个 Android,并不意味着它会完全一样地移植。您现在或将来可能会发现应用程序运行和/或显示的方式存在细微差别。虽然他的回答很简单,可能对您有好处,但请记住,您可能必须进行仅影响 Android/Kindle 的更改。祝你好运! @Blaine,你提出了一些重要的考虑。我只回答了被问到的问题,“我的应用程序如何确定它是否在 Kindle Fire 上运行”。 @spencer7593,你是对的。你确实回答了这个问题,而且你做得很好。我想这就是你得到这么多票的原因!老实说,我自己投了赞成票。我只是想为您提供的精彩答案添加更多内容。深思熟虑,如果你愿意的话。【参考方案6】:您可以包含指向一般网页的链接,然后该网页可以将流量重定向到 Amazon AppStore 或 Google Play。
例如,您可以包含链接 www.yourwebsite.com/getapp,然后将流量重定向到 Google Play 或 Amazon。
即使背后有逻辑,亚马逊也不太可能接受 Google Play 链接。
【讨论】:
这可能有效,但用户会首先看到浏览器,对吧?此外,您必须实施相同的逻辑来决定它是什么操作系统。我想还是用 Android 代码做比较好。【参考方案7】:实际上,您可以完全跳过检查,只需链接到 market://details?id=packagename
【讨论】:
以上是关于如何区分 Android 应用程序是不是在 Amazon Kindle Fire 上运行?的主要内容,如果未能解决你的问题,请参考以下文章
焦点对话AMA:Cirus如何重新定义所有权经济 用数据释放时代价值
焦点对话AMA:Cirus如何重新定义所有权经济 用数据释放时代价值
AMA预告波卡生态 DeFi 拉开序幕,Zenlink 如何备战上线?