16

有什么方法可以知道应用程序是否已从 Amazon App Store 或 Google Play Store 下载?当然,我的意思是在应用程序本身内。

我已经在这两个站点上部署了一个应用程序,我更想知道客户在应用程序中从哪里下载了它。我知道,我可以为每个服务部署不同的应用程序,但这增加了一些维护工作,如果有某种方法可以通过使用相同包的应用程序中的条件来解决它,则可以避免这些工作。

4

2 回答 2

16

在代码中:

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 商店。我不确定 Amazon Appstore 是什么,但使用上面的代码应该很容易测试。

通过亚行:

adb shell pm dump "PACKAGE_NAME" | grep "vending"

例子:

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

installerPackageName=com.android.vending
于 2013-02-27T07:09:30.093 回答
6

虽然在大多数情况下,您可以通过包含类似于以下内容的检查来获取商店名称:

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 商店,
“com.amazon.venezia”是亚马逊应用商店,
当它被侧载时为 null

然而,结果可能不可靠,例如在 beta 测试期间,商店可能不会设置此值,此外还可以旁加载您的应用程序,指定安装程序的包名称,该名称可以解释为商店名称:

adb install -i <INSTALLER_PACKAGE_NAME> <PATH_TO_YOUR_APK>

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

于 2016-04-08T07:34:14.437 回答