android 应用程序如何检测安装它的商店?

Posted

技术标签:

【中文标题】android 应用程序如何检测安装它的商店?【英文标题】:How android app can detect what store installed it? 【发布时间】:2013-07-11 20:58:42 【问题描述】:

我在 Google Play、Amazon、Samsung Apps 中有应用程序,我计划上传到其他商店。 我不希望为每个商店编译单独的版本。 如果同一个应用提交到不同的商店,有没有办法检测哪个商店安装了应用?

【问题讨论】:

【参考方案1】:

您必须为每个额外的商店扩展它,但这应该可以帮助您开始

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

【讨论】:

过去我没有发现这是可靠的。我尝试将安装时的 getInstallerPackageName 发送到我的网络服务器,并将一个流行的应用程序上传到 6 个市场,41% 甚至没有设置 如果使用它来将用户重定向到商店,请使用开关,并默认为 Google Play 商店。【参考方案2】:

我在 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 和 slideme.org store 中的应用程序提交

更新:看起来有时安装程序包名称 com.google.android.feedback 似乎也与谷歌商店有关,虽然我见过在我的测试应用程序的谷歌分析中,com.android.vending 的频率要高得多。所以如果你想让这个更精确,你也应该处理这个安装程序包。 另请注意,某些市场(如 slideme.org)似乎根本没有设置包安装程序 ID。

另请参阅:Can PackageManager.getInstallerPackageName() tell me that my app was installed from Amazon app store?

【讨论】:

【参考方案3】:

除非您进行单独的构建,否则不会。但是通过一个好的 maven setup/ant 脚本,你可以轻松地自动化这个过程。

【讨论】:

以上是关于android 应用程序如何检测安装它的商店?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测当前运行的应用程序是不是是从应用商店安装的?

检测是不是从 Play 商店安装了应用程序

vivo如何关闭应用安装检测

如何仅针对已安装应用程序的用户在 Android Play 商店上发布应用程序?

有没有办法通过本机 C# 调用检测系统上安装了哪些 Windows 应用商店应用程序?

使用移动网页检测设备上是不是已安装 Android 应用 - PHP 和 JS