gpt4 book ai didi

android - 如何在不丢失用户数据的情况下从免费升级到商业

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:20 25 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序以两个版本分发:免费的广告和付费的无广告。除了存在广告之外,这些应用完全相同。

通常认为用户会获得免费版本,然后 - 如果他们愿意 - 升级到商业版本。

当我将应用程序上传到 google play 时,我必须创建一个全新的应用程序,并使用一个新的唯一 ID。换句话说,同一个应用程序的这两个版本实际上是两个完全不同的项目,而且在我看来,这是无法避免的。

这是有道理的,因为我必须监控哪个应用为我提供了哪些收入。

但是 - 现在问题来了 - 当用户决定从免费版升级到商业版时,我希望他保留所有本地数据。显然这不会发生,因为这两个应用程序的名称不同。

这个问题有简单的解决方案吗?

谢谢。

最佳答案

当用户从免费版升级到付费版时,如何在免费和付费应用之间共享数据

这是一个非常普遍的问题,充满了各种问题,包括以下内容:

  • 当用户安装并运行付费应用时,所有用户数据都应该是从免费应用程序复制。
  • 如果用户在完成升级到付费,他应该会自动重定向到付费应用程序。
  • 当用户删除付费应用时,应允许免费应用像以前一样继续工作。

最简单的解决方案是维护所有必须在数据库中共享的数据而不是用户首选项。然后,当付费应用程序首次运行时,数据库文件可以从免费应用程序中逐字复制到付费应用程序中。

我发现这对我来说比 Content Providers 更有效,因为在任何时候只安装一个或另一个或两个应用程序的所有特殊用例条件。

为了让这个系统正常工作,必须有几个关键工具:

  • 应用程序必须能够检测彼此是否安装在运行时。
  • 应用程序必须知道它们的对应方将数据库保存在哪里文件。
  • 必须在数据库文件中保存几个标志来指示什么已经发生了。

如何判断是否安装了其他应用:

final String packageName = "com.company.other-app-name";
android.content.pm.PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo(packageName, 0);

如果抛出 info==nullNameNotFoundException,则不会安装该应用。

如何复制数据库文件:

你的数据库文件是这样存储的:

paidDb = "/data/data/<paid-app-package-name>/databases/<db-name>.db"
freeDb = "/data/data/<free-app-package-name>/databases/<db-name>.db"

您的复制函数应该打开这些文件上的 FileInputStreamFileOutputStream 对象,并通过任意数量的标准方法复制它们,例如:

while ((length = fis.read(buffer))>0) {
fos.write(buffer, 0, length);
}

这应该提供您需要的所有工具,以便让付费应用确定是否安装了免费应用,如果安装了则复制数据库并从那里继续。免费应用程序应检查是否安装了付费应用程序。如果是这样,请退出并发出友好警告或重定向到付费应用,如下所示:

android.content.pm.PackageManager pm = getPackageManager();
final Intent intent = pm.getLaunchIntentForPackage(packageName);
startActivity( intent );
finish();

可选删除免费应用:

付费应用检测到免费应用并复制数据库后,您可以选择要求用户删除免费应用,如下所示:

Uri uri = Uri.parse("package:<free-app-package-name>");
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
startActivityForResult(intent, REQUEST_CODE_UNINSTALL_FREE_APP);

注意:您不能保证用户真的会按要求卸载免费应用。使用值 REQUEST_CODE_UNINSTALL_FREE_APP 以便当您从付费应用程序的 onActivityResult() 中的卸载程序返回时,您可以检查用户是否已完成删除。然后,如果卸载没有发生,您可以提供通常的“您确定吗?”或“再试一次?”对话,甚至对他施加严厉的惩罚(不推荐)并强制他完成卸载,然后再允许他继续使用新的付费应用。

进一步考虑:

  • 您所有的共享代码都应该在 Android LIbrary Project 中和每个应用程序都应该是使用共享库。所有三个项目都将在一个 Eclipse 中工作区。
  • 考虑使用 Android License Verification Library (LVL)为了付费应用程序项目(图书馆项目不需要 LVL或免费应用程序)。
  • 还可以考虑放弃所有这些想法,只制作一个应用程序,并使用 In-app Billing从免费升级到付费。这超出了这个问题的范围。

关于android - 如何在不丢失用户数据的情况下从免费升级到商业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15530072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com