如何防止部分用户从Android市场升级应用程序?

时间:2011-07-26 09:00:50

标签: android google-play

我们有一个应用程序,它本身可以免费下载,但可以使用付费的许可数据。一些用户购买特定版本的数据,而其他用户购买权利使用最新数据一段时间。现在随着应用程序的发展,它最终会停止支持比某个日期更早的数据。很明显,那些拥有这些数据许可但没有新数据许可证的用户不想升级。但是,如果我们在市场上发布新版本,他们会看到它,如果他们升级,他们将难以降级回实际适合他们的版本。

那么我们能否以某种方式指示市场应用程序不为特定用户提供升级或为实现这一目标而进行一些黑客攻击?

我们目前使用完全独立于市场的机制来销售和检查数据的许可证,但如果它可以帮助解决问题,可以考虑不同的机制(如Android内置应用程序计费支持或其他)。

6 个答案:

答案 0 :(得分:1)

我看到它的方式,你有两个选项来“禁用”升级:

  • 使用其他签名密钥 - 这样可以在不删除以前的应用程序的情况下阻止安装,但仍会显示升级通知(我认为)
  • 使用不同的软件包名称 - 这将阻止升级,因为就市场而言,它是一个完全独立的应用程序,并且还有副作用,旧版本仍可供那些获得该数据许可的用户使用版本

第二个选项可能是更好的匹配,因为如果需要进行错误修复,您可以推出升级,但也可以确保不会将全新版本检测为升级。


编辑:

完全同意上述选项很麻烦,并没有真正解决问题。

正如您所提到的,您可以使用in-app billing,但考虑到您的要求的性质,您必须使用非托管购买,这意味着您需要一些基础设施来管理授权购买并阻止人们购买相同的许可证太多次了。

我猜你已经有了很多基础设施来处理数据的分发。

答案 1 :(得分:1)

数据可以在文件开头不包含“格式版本”号吗?

然后您可以对应用程序进行编程以读取版本1文件,新应用程序需要更多数据源字段,因此您创建版本2数据,这会添加额外字段,版本1应用程序看到数据需要更新的应用程序,所以告诉用户升级。

版本2应用程序应该知道如何阅读版本1文件和版本2文件(可能创建一个阅读器界面并为不同版本的文件实现加载器。)

您必须处理v2应用程序中加载程序中v1 / old文件中缺少的数据。加载旧文件对于客户来说是最好的方式,因为应用程序不应该在升级后停止工作。

如果您保留每种格式数据的副本,您可以快速运行测试以检查新版本的加载程序是否可以正确加载每个文件,如果应用程序中有错误,您将不必修复多个应用程序版本,只需现在的。

答案 2 :(得分:1)

好的..我看到其中一张海报建议您有办法阅读旧数据 首先,这可能是最好的选择,但正如你说你的应用程序一团糟。 您应该花一些时间将数据读/写迁移到抽象层。你(一个可能不到4年的项目)的痛苦只会变得更糟。

好的..所以这就是我在长期应用程序中处理它的方式..

创建迁移路径..创建新的类调用迁移。 它有几个函数可以将文件版本从n转换为n-1 convert_1_to_2(fileName){检查版本和升级数据。) convert_2_to_3(文件名)...

我怀疑你有旧代码,你可以编写一种方法将一位数据转换为下一位数据。 当您向数据添加新功能时,您将创建一个新的转换器。不需要了解早期的转换器,并且一切都会很好并且自包含。 你甚至可以进行子迁移,所以在开发周期的一部分,你可以有convert_3a_to_3b。

现在......如果用户想要返回,您可以归档原始版本的数据。

答案 3 :(得分:0)

如果远程访问数据,您可以在请求时让应用程序包含版本或其自身的哈希值。然后根据该信息过滤提供的数据。

如果您已经拥有应用内购买和支持它的基础架构,则只需在升级应用时轮询新数据。如果用户购买了当前数据的许可证,请提供该许可证。否则只需继续使用现有数据。

答案 4 :(得分:0)

我想出了一个选项,市场将包含一个安装程序,该安装程序将在本地下载并安装包含应用程序核心的另一个.apk

我们已经在应用程序中安装了一个用于下载数据的安装程序对话框,用户在第一次使用该应用程序时必须输入该对话框,因此也可以对应用程序内核负责。

答案 5 :(得分:0)

您无法阻止用户下载他们已有的应用程序的新版本。您可以注册新应用程序,也可以以编程方式检查版本和用户数据。