我在 Google Play、Amazon、Samsung Apps 中有应用程序,我计划上传到其他商店。 我不想为每个商店编译单独的版本。 如果同一个应用程序提交到不同的商店,是否有办法检测哪个商店安装了应用程序?
您必须为每个额外的商店扩展此功能,但这应该可以帮助您开始
if (context.getPackageManager().getInstallerPackageName(context.getPackageName()).equals("com.android.vending")
{
//do google things
}
else if (context.getPackageManager().getInstallerPackageName(context.getPackageName()).equals("com.amazon.venezia")
{
//do amazon things
}
我在 MainActivity 中检测到这样的安装程序:
//is installed via amazon, google?
String installerId = null;
try {
installerId = this.getPackageManager().getInstallerPackageName(this.getPackageName());
} catch (Exception e) {
//just in case...
}
if ("com.amazon.venezia".equals(installerId)) {
// amazon
} else if ("com.android.vending".equals(installerId)) {
// google
} else {
// others & unknown ones
}
我在我的上一个应用程序中对此进行了测试,它通过了 googe play、amazon store 和 slipme.org store 中的应用程序提交
更新:看起来有时会有安装程序包名称com.google.android.feedback,它似乎也与谷歌商店相关,尽管我在我的测试应用程序的谷歌分析中看到了com.android。迄今为止,自动售货更加频繁。因此,如果您想让其更加精确,您也应该处理此安装程序包。 另请注意,某些市场(例如 Slideme.org)似乎根本没有设置软件包安装程序 ID。
另请参阅:PackageManager.getInstallerPackageName() 可以告诉我我的应用程序是从 Amazon 应用商店安装的吗?
除非您进行单独的构建,否则不会。但通过良好的 Maven 设置/ant 脚本,您可以轻松地自动化此过程。
希望有帮助
fun handleAppStoreSpecificLogic(context: Context) {
val packageManager = context.packageManager
val installerPackageName = packageManager.getInstallerPackageName(context.packageName)
when (installerPackageName) {
"com.android.vending" -> {
// Google Play Store
doGooglePlayStoreThings()
}
"com.amazon.venezia" -> {
// Amazon Appstore
doAmazonAppstoreThings()
}
"com.sec.android.app.samsungapps" -> {
// Samsung Galaxy Store
doSamsungGalaxyStoreThings()
}
"com.huawei.appmarket" -> {
// Huawei AppGallery
doHuaweiAppGalleryThings()
}
"com.xiaomi.mipicks" -> {
// Xiaomi Mi GetApps
doXiaomiMiGetAppsThings()
}
"com.oppo.market" -> {
// OPPO App Market
doOppoAppMarketThings()
}
"com.vivo.appstore" -> {
// VIVO App Store
doVivoAppStoreThings()
}
"com.hihonor.appmarket" -> {
// Honor App Market
doHonorAppMarketThings()
}
else -> {
// Unknown or direct installation
doDefaultThings()
}
}
}
fun doGooglePlayStoreThings() {
// Implement Google Play Store specific logic here
}
fun doAmazonAppstoreThings() {
// Implement Amazon Appstore specific logic here
}
fun doSamsungGalaxyStoreThings() {
// Implement Samsung Galaxy Store specific logic here
}
fun doHuaweiAppGalleryThings() {
// Implement Huawei AppGallery specific logic here
}
fun doXiaomiMiGetAppsThings() {
// Implement Xiaomi Mi GetApps specific logic here
}
fun doOppoAppMarketThings() {
// Implement OPPO App Market specific logic here
}
fun doVivoAppStoreThings() {
// Implement VIVO App Store specific logic here
}
fun doHonorAppMarketThings() {
// Implement Honor App Market specific logic here
}
fun doDefaultThings() {
// Implement default logic for unknown or direct installations
}