有什么方法可以知道应用程序是否已从 Amazon App Store 或 Google Play Store 下载?当然,我的意思是在应用程序本身内。
我已经在这两个站点上部署了一个应用程序,我更想知道客户在应用程序中从哪里下载了它。我知道,我可以为每个服务部署不同的应用程序,但这增加了一些维护工作,如果有某种方法可以通过使用相同包的应用程序中的条件来解决它,则可以避免这些工作。
有什么方法可以知道应用程序是否已从 Amazon App Store 或 Google Play Store 下载?当然,我的意思是在应用程序本身内。
我已经在这两个站点上部署了一个应用程序,我更想知道客户在应用程序中从哪里下载了它。我知道,我可以为每个服务部署不同的应用程序,但这增加了一些维护工作,如果有某种方法可以通过使用相同包的应用程序中的条件来解决它,则可以避免这些工作。
在代码中:
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
虽然在大多数情况下,您可以通过包含类似于以下内容的检查来获取商店名称:
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 脚本中轻松设置它们。