Android应用程序如何检测哪些商店安装了它?

Max*_*Max 13 android amazon-appstore samsung-mobile google-play

我有谷歌播放,亚马逊,三星应用程序的应用程序,我打算上传到其他商店.我不希望为每个商店编译单独的构建.如果相同的应用程序提交到不同的商店,有没有办法检测哪个商店安装了应用

pre*_*ion 16

你必须为每个额外的商店扩展这个,但这应该让你开始

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

  • 我没有发现这在过去是可靠的.我尝试将安装时的getInstallerPackageName发送到我的网络服务器,将一个流行的应用程序上传到6个市场,41%甚至没有设置 (4认同)

don*_*uxx 11

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

我在上一个应用程序中对此进行了测试,并在googe play,amazon store和slideme.org商店中通过了应用程序提交

更新:看起来有时安装程序包名称com.google.android.feedback似乎也与谷歌商店有关,虽然我在我的测试应用程序的谷歌分析中看到com.android.vending更频繁.因此,如果您想要使其更加精确,您也应该处理此安装程序包.另请注意,某些市场(如slideme.org)似乎根本没有设置软件包安装程序ID.

另请参阅:PackageManager.getInstallerPackageName()能告诉我我的应用程序是从Amazon应用商店安装的吗?