Как отличить приложение Android от Amazon Kindle Fire?

Недавно я отклонил свое приложение с портала распространения приложений Amazon Mobile App с аргументом о том, что пункт меню " > " Оценить приложение "перенаправляется в Google Play Store.

Чтобы быть принятым, он должен перенаправить на App Store Amazon, 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?

Ответы

Ответ 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.


ОБНОВЛЕНИЕ:

Предыдущее работает для Gen 1 Kindle Fire.

Новые модели Kindle Fire имеют разные значения для android.os.Build.MODEL.

https://developer.amazon.com/sdk/fire/specifications.html

Ответ 2

Хорошие новости! По-видимому последняя версия магазина Amazon наконец устанавливает 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

Ответ 4

Обнаружение Kindle Fire является частью решения, но не для всего решения. Последнее текущее сообщение в этот поток, похоже, доходит до сути "было ли это установлено из магазина Amazon", что вполне может быть Kindle Fire, или нет!

< snip, слегка отредактированный >

Правильный способ определить, установлено ли приложение через Appstore в рабочем режиме, используется метод onSdkAvailable(boolean isSandboxMode).

Документация по метод onSdkAvailable (boolean isSandboxMode). Аннотация:

  • Этот обратный вызов вызывается после регистрации PurchasingObserver с помощью PurchasingManager
  • Этот метод сообщает вам, работает ли платформа закупки в режиме песочницы с тестовыми данными или в режиме производства с реальными данными.
  • Если ваше приложение загружено через Amazon Client, isSandboxMode вернет false
  • Инициирующий метод следует вызывать в рамках метода onStart() жизненного цикла

При регистрации вашего PurchaseObserver вы получите асинхронный вызов, onSdkAvailable(Boolean isSanboxMode). Если приложение загружается через Amazon Client, то isSandboxMode всегда будет возвращать false. Этот код будет работать успешно в режиме производства, однако в среде разработки/тестирования isSandboxMode всегда будет возвращать значение true, поскольку приложение не сглажено через клиента Amazon в тестовой среде.

Ответ 5

Я бы просто создал 2 приложения. Один для Android. Один для Kindle.

Ответ 6

Вы можете включить ссылку на общую веб-страницу, а затем веб-страницу может перенаправить трафик в AppStore Amazon или в Google Play.

Например, вы можете включить ссылку www.yourwebsite.com/getapp, которая затем перенаправляет трафик на Google Play или Amazon.

Amazon вряд ли согласится с ссылкой в ​​Google Play, даже с логикой.

Ответ 7

Фактически вы можете вообще пропустить проверку и просто ссылаться на рынок://details? id = packagename