【问题标题】:Detect if an Android app was downloaded from Google Play vs Amazon vs Other检测是否从 Google Play 与 Amazon 与其他下载了 Android 应用程序
【发布时间】:2013-02-27 05:23:50
【问题描述】:

我知道这可能是一个远景,但是有没有办法以编程方式检测应用程序是托管在亚马逊应用商店还是托管在 Google Play 上?我想链接到下载该应用程序的应用商店,如果可以避免的话,我宁愿不要有两个不同的 APK,只有这种差异。

【问题讨论】:

  • 从亚马逊加载的应用程序是否从那里获取更新............?

标签: android google-play amazon-appstore


【解决方案1】:

就在最近,亚马逊应用商店返回了PackageManager.getInstallerPackageName() 的合理值

PackageManager pm = context.getPackageManager();
String installerPackageName = pm.getInstallerPackageName(context.getPackageName());

if ("com.android.vending".equals(installerPackageName)) {
    //do google things
} else if ("com.amazon.venezia".equals(installerPackageName)) {
    //do amazon things
}

请看这里: https://forums.developer.amazon.com/forums/thread.jspa?threadID=680

评价此应用链接的示例:

Google Play-

market://details?id=PACKAGANAME

亚马逊商店

http://www.amazon.com/gp/mas/dl/android?p=PACKAGENAME

amzn://apps/android?p=com.amazon.mp3

【讨论】:

  • 谢谢,我试试看!
  • 嗨@AlfieHanssen。我仍然需要验证这一点。
  • 请注意,如果应用是使用 ADB 安装的,getInstallerPackageName() 可能会返回 null
【解决方案2】:

最简单的方法是在 Amazon 和 Google Play 之间使用不同的版本代码或名称。然后您可以使用PackageManager.getPackageInfo 检索这些值并从那里适当地选择应用商店链接。

示例:使用“.65”作为您所有亚马逊版本名称的后缀,即 1.0.65。然后使用

public boolean isAmazon(Context context) {
    String versionName = "";
    try {
        versionName = context.getPackageManager().getPackageInfo(
            getPackageName(), 0).versionName;
    } catch (NameNotFoundException e) {
        // Can't find itself...
    }
    return versionName.endsWith(".65");
}

【讨论】:

  • 谢谢。这是一种方法,但不幸的是,这是一个编译时更改,不能解决特定情况。我可以很容易地在我的清单中添加一个元数据标签,从长远来看这可能会更干净,因为两个包的版本可以保持相同。
  • 最好使用 PackageName 而不是 VersionName,因为在版本中添加字母很奇怪(更容易更改捆绑名称)。
  • 亚马逊也不接受不同于 x.x.x.x.x 的版本名称,其中 x 只是整数。在这里阅读:Link
猜你喜欢
  • 2012-06-19
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多