Как приложение Android может определить, какой магазин установил его?

У меня есть приложение в Google Play, Amazon, Samsung Apps, и я планирую загрузить в другие магазины. Я не хочу составлять отдельную сборку для каждого магазина. Есть ли способ определить, какое приложение установлено в магазине, если одно и то же приложение отправлено в разные магазины?

Ответ 1

Вам придется расширить это для каждого дополнительного магазина, но это должно помочь вам начать

if (context.getPackageManager().getInstallerPackageName(context.getPackageName()).equals("com.android.vending")
{
//do google things
}
else if (context.getPackageManager().getInstallerPackageName(context.getPackageName()).equals("com.amazon.venezia")
{
//do amazon things
}

Ответ 2

Я обнаруживаю установщик как это внутри MainActivity:

//is installed via amazon, google?
String installerId = null;
try {
    installerId = this.getPackageManager().getInstallerPackageName(this.getPackageName());
} catch (Exception e) {
    //just in case...
}

if ("com.amazon.venezia".equals(installerId)) {
    // amazon 
} else if ("com.android.vending".equals(installerId)) {
    // google
} else {
    // others & unknown ones
}

Я тестировал это в своем последнем приложении, и он передал приложение в игру googe, магазин amazon и магазин slideme.org

Обновление: похоже, иногда есть имя пакета установщика com.google.android.feedback, которое, похоже, также связано с хранилищем google, хотя я видел в своем тестовом приложении Google Analytics, что com.android.vending намного чаще. Поэтому, если вы хотите сделать это еще точнее, вам также следует обращаться с этим пакетом установщика. Также обратите внимание, что некоторые рынки (например, slideme.org) просто не устанавливают идентификатор установки пакета вообще.

См. также: Может ли PackageManager.getInstallerPackageName() сказать, что мое приложение было установлено из магазина приложений Amazon?

Ответ 3

Нет, если вы не делаете отдельные сборки. Но с хорошей настройкой maven/ ant script вы могли бы легко автоматизировать этот процесс.