Как узнать, загружено ли приложение из Google Play или Amazon?
Есть ли способ узнать, было ли приложение загружено из магазина приложений Amazon или в Google Play Store? Разумеется, я имел в виду в самом приложении.
Я развернул приложение на обоих сайтах, и мне хотелось бы узнать, откуда клиент загрузил его в приложение. Я знаю, я могу развернуть различные приложения для каждой службы, но это добавляет некоторые работы по техническому обслуживанию, которых можно было бы избежать, если бы было какое-то решение для решения только с условным в приложении с использованием того же пакета.
Ответы
Ответ 1
В коде:
final PackageManager packageManager = getPackageManager();
try {
final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0);
if ("com.android.vending".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) {
// App was installed by Play Store
}
} catch (final NameNotFoundException e) {
e.printStackTrace();
}
"com.android.vending" сообщает, что он пришел из Google Play Store. Я не уверен, что такое Amazon Appstore, но это должно быть легко проверить, используя приведенный выше код.
Через ADB:
adb shell pm dump "PACKAGE_NAME" | grep "vending"
Пример:
adb shell pm dump "com.android.chrome" | grep "vending"
installerPackageName=com.android.vending
Ответ 2
В большинстве случаев вы можете получить имя магазина, включив в него проверку:
final PackageManager packageManager = getPackageManager();
try {
final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0);
if ("com.android.vending".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) {
// App was installed by Play Store
} else if ("com.amazon.venezia".equals(packageManager.getInstallerPackageName(applicationInfo.packageName))) {
// App was installed by Amazon Appstore
} else {
// App was installed from somewhere else
}
} catch (final NameNotFoundException e) {
e.printStackTrace();
}
"com.android.vending" - это Google Play Store и
"com.amazon.venezia" - это Амазонская аптека, и
null, когда он был загружен боком
Результаты могут быть ненадежными, например, например, во время бета-тестирования магазин может не устанавливать это значение, и кроме того, можно отключить приложение, указав имя пакета установщика, которое может быть интерпретировано как имя магазина:
adb install -i <INSTALLER_PACKAGE_NAME> <PATH_TO_YOUR_APK>
Возможно, вам захочется рассмотреть разные имена пакетов для разных магазинов, например "com.example.yourapp" для Google и "com.example.yourapp.amazon" для Amazon - вы можете легко установить их в своем Gradle script.