Как узнать, загружено ли приложение из Google Play или Amazon?

Есть ли способ узнать, загружено ли приложение из Amazon или Google Play? Конечно, я имел в виду в самом приложении.

Я развернул приложение для обоих сайтов, и мне хотелось бы узнать, откуда клиент загрузил его в приложение. Я знаю, что я могу развернуть различные приложения для каждой службы, но это реклама некоторых работ по техническому обслуживанию, которых можно было бы избежать, если бы можно было решить ее только с помощью условного в приложении, используя тот же пакет.

В коде:

 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 shell pm dump "PACKAGE_NAME" | grep "vending" 

Пример:

 adb shell pm dump "com.android.chrome" | grep "vending" installerPackageName=com.android.vending 

Хотя в большинстве случаев вы можете получить имя магазина, включив в него проверку:

 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.