如何知道应用是否已从Google Play或亚马逊下载?

Fra*_*zoa 14 java android amazon-appstore google-play

有没有办法知道某个应用程序是从Amazon App Store还是从Google Play商店下载的?当然,我的意思是在应用程序内部.

我已经为这两个站点部署了一个应用程序,而我更愿意知道客户在应用程序中的下载位置.我知道,我可以为每个服务部署不同的应用程序,但这增加了一些维护工作,如果有一些方法可以使用相同的包在应用程序中使用条件来解决它.

Sco*_*edy 14

在代码中:

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();
}
Run Code Online (Sandbox Code Playgroud)

"com.android.vending"告诉你它来自Google Play商店.我不确定亚马逊Appstore是什么,但使用上面的代码测试应该很容易.

通过亚行:

adb shell pm dump "PACKAGE_NAME" | grep "vending"
Run Code Online (Sandbox Code Playgroud)

例:

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

installerPackageName=com.android.vending
Run Code Online (Sandbox Code Playgroud)


Lev*_*von 5

虽然在大多数情况下,您可以通过添加类似于以下内容的支票来获得商店名称:

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();
}
Run Code Online (Sandbox Code Playgroud)

“ com.android.vending”是Google Play商店,
“ com.amazon.venezia”是Amazon Appstore,
在侧面加载时为null

但是结果可能不可靠,例如,在Beta测试期间,商店可能未设置此值,此外,还可以通过指定安装程序的软件包名称(可以解释为商店名称)来侧面加载应用程序:

adb install -i <INSTALLER_PACKAGE_NAME> <PATH_TO_YOUR_APK>
Run Code Online (Sandbox Code Playgroud)

您可能要考虑为不同的商店使用不同的应用程序ID,例如Google的“ com.example.yourapp”和Amazon的“ com.example.yourapp.amazon”-您可以在Gradle脚本中轻松设置这些ID。