如何知道应用程序是从Google Play还是亚马逊下载的?
2022-09-03 06:15:24
有没有办法知道应用程序是从亚马逊App Store还是Google Play商店下载的?当然,我的意思是在应用程序本身内。
我已经将一个应用程序部署到这两个站点,我非常想知道客户从应用程序中下载它的位置。我知道,我可以为每个服务部署不同的应用程序,但这会增加一些维护工作,如果有某种方法可以避免仅使用使用相同包的应用程序内的条件来解决它。
有没有办法知道应用程序是从亚马逊App Store还是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商店。我不确定亚马逊应用商店是什么,但使用上面的代码进行测试应该很容易。
通过亚行:
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”是Amazon Appstore,当它被旁加载时为空。
但是,结果可能不可靠,例如在 Beta 测试期间,商店可能不会设置此值,此外,还可以旁加载应用,指定安装程序的程序包名称,该名称可以解释为商店名称:
adb install -i <INSTALLER_PACKAGE_NAME> <PATH_TO_YOUR_APK>
您可能要考虑为不同的商店提供不同的应用程序ID,例如Google的“com.example.yourapp”和Amazon的“com.example.yourapp.amazon” - 您可以在Gradle脚本中轻松设置这些ID。