【问题标题】:android: Detect if App was downloaded from marketandroid:检测应用程序是否从市场下载
【发布时间】:2010-10-08 11:30:48
【问题描述】:

我有一个应用程序,我想通过市场和我自己的网站分发它。如何仅使用一个版本和一个密钥来检查应用程序是否是从市场下载的?

This question 的答案是使用不同的密钥对代码进行签名,但理想情况下我们需要一个构建。

【问题讨论】:

  • 据我所知,这无法在一次构建中完成。
  • Sergey - 将此作为答案,我会将其标记为正确。据我所知,你是对的,这是不可能的。

标签: android download google-play


【解决方案1】:

packageManager.getInstallerPackageName(context).equals("com.google.android.feedback")

http://developer.android.com/reference/android/content/pm/PackageManager.html#getInstallerPackageName(java.lang.String)

【讨论】:

  • 这可能不是一个可行的解决方案,因为 some developers are reporting 表示 getInstallerPackageName() 在通过 Market 安装应用程序时并不总是返回相同的值(或任何值)。
【解决方案2】:

这个好像不行。

【讨论】:

  • 请注意,只有在 OP 的约束下才能完成。它可以通过使用唯一密钥签署市场构建,并将密钥的校验和与应用程序内的存储值进行比较来完成。就个人而言,我更喜欢通过构建脚本来定制发布版本和调试版本。
【解决方案3】:

在我的 Android 1.5 手机上,只有通过 Market 安装的应用程序才会列在 Market App 的“我的下载”中,所以问题是您是否可以在运行时检索该列表。不知道Android 2.x是不是也这样。

【讨论】:

    【解决方案4】:

    市场上的付费应用可以使用 Android 许可模块来确定它们是否是从市场上购买的。但是对于免费应用,我不知道解决方案

    http://developer.android.com/guide/publishing/licensing.html

    【讨论】:

      【解决方案5】:

      我不知道这是否真的相关,但如果你可以阅读 /data/system/packages.xml 市场应用似乎有 installer="com.google.android.feedback" 而那些与系统捆绑build 而那些本地编译的则不会。

      【讨论】:

      • 最近Android Market有包“com.android.vending”。
      猜你喜欢
      • 2021-10-10
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2015-05-03
      • 1970-01-01
      相关资源
      最近更新 更多