通过应用内购买将付费Android应用更改为免费应用

时间:2014-01-09 10:51:00

标签: android google-play

我在Google Play商店获得了成功的应用付款,并希望将此应用更新为应用内购买的免费应用。

我刚刚完成了应用程序的免费版本的开发,该版本为用户提供了限制访问权限,然后可以使用应用程序内购买系统解锁。

我遇到的问题是,所有为该应用付费的现有用户都会升级,然后再次提示再次付费,这当然是不对的。

有没有办法检查用户的购买历史记录,确定他们之前已为该应用付款并在没有应用内购买的情况下解锁额外的功能?

感谢您的帮助。 路易斯

6 个答案:

答案 0 :(得分:5)

已经过了一年,所以OP可能不需要这个,但万一有其他人发生这个......

你可以通过几种方式来解决这个问题。显然,您的新应用内购买应用中存在一些业务逻辑,用于跟踪谁已经/未付款。因此,我认为你能够解决这个问题的两种方式如下:

创意1:

您可以对付费应用程序进行初步更新,该应用程序在应用程序中存储SharedPreference或其他一些持久性(您可以存储versionCode,因此您知道要升级的内容并具有围绕该内容的业务逻辑)。然后更新到免费版本,并使用免费版本检查您的共享首选项,并在“付费”版本代码的更新上做正确的事情。

创意2:

您可以将这两个应用分开(有付费版本和免费应用内购买)并推送付费版本的更新,以获得BroadcastReceiver除了听取之外什么都不做具体意图,并进行应用程序内购买检查,看看是否有东西会接收你的自定义意图。如果你的旧付费版本存在,那么他们就付了钱,如果没有,他们就不付钱。 (如果他们支付了付费版本然后卸载了你明显会遇到问题......)

创意3:

您可以将这两个应用分开(有付费版本和免费应用内购买),并将更新推送到仅发布Intent的付费版本以打开应用内购买应用(如果已安装)有一些特殊的参数,为了让你知道他们通过付费应用程序打开它并做正确的事情将它们设置为在应用内付费。这可以让你自己解决一些检测问题...(可解决但有点笨重)

答案 1 :(得分:1)

您可以保留现有的付费版本并创建另一个免费版本。

如果您真的不想拥有2个版本,请将其免费告诉用户“如果您已购买付费版本,请与我们联系”。我们将为您提供兑换代码以解锁xxx'。

答案 2 :(得分:0)

对于Google Play,支付应用或免费下载之间没有区别。例如,如果用户在免费下载应用程序并且稍后更改为付费该用户仍然可以完全访问它,甚至可以在其他设备上下载。

有一些蹩脚的解决方法

  • 在付费版本上启用google play game services,并尝试诱使用户连接到该版本。使用Google Play服务将“付费时付款”信息存储到云端,并在用户登录时恢复该信息
  • 为已购买某些密钥的所有用户提供解锁功能
  • 为游戏的免费版本创建不同的

那就是说,请记住,许多游戏在一段时间后变得自由。也许用户不会那么介意。

答案 3 :(得分:0)

https://developer.android.com/distribute/tools/launch-checklist.html#decide-price

此链接似乎相关,希望有所帮助

  

在Google Play上,您可以免费下载或定价发布应用。 Google Play中的任何Android用户都可以下载免费应用。付费应用只能由支持付费下载并在Google Play中注册了付费方式的国家/地区的用户下载,例如信用卡或直接运营商结算。

     

确定您的应用是免费还是付费非常重要,因为在Google Play上,免费应用必须保持免费。

     

将应用程序发布为免费应用程序后,您无法将其更改为定价应用程序。不过,您仍然可以通过Google Play的应用内结算服务销售应用内商品和订阅。   如果您将应用程序发布为定价应用程序,则可以随时将其更改为免费应用程序(但不能将其更改为定价)。您还可以销售应用内商品和订阅。   如果您的应用已定价,或者您要销售应用内商品,则需要先设置Google付款商家帐户,然后才能发布。

答案 4 :(得分:0)

我觉得最简单的方法是使用theese代码行

这为您提供旧版本代码

SharedPreferences prefs = getSharedPreferences("Name_of_Prefs", MODE_PRIVATE);
int oldVersionCode = prefs.getInt("version_code", -1);

这将为您提供当前版本代码

int currentVersionCode = getPackageManager().getPackageInfo(getPackageName(),0).versionCode;

现在你可以比较并做你想做的事。不要忘记每次更新后 使用这行代码

prefs.edit().putInt(PREF_VERSION_CODE_KEY, currentVersionCode).commit();

答案 5 :(得分:0)

就我而言(确认柜台应用程序)

我的付费应用程序基于共享首选项值“ lastaffirmationcount”运行

在新的Iap应用程序中,我只是更改了保存确认计数器值(例如“ lastaffirmationscount_foriap”)的方式

因此,我免费使用In App Purchase应用程序进行的操作是,交叉检查“ lastaffirmationcount”值是否不为null,如果为null则表示新用户,如果不为null则表示他是购买了旧用户付费应用

所以老用户不会永远受苦

(可选地,一旦选中,我会立即要求该用户使用google登录并将其电子邮件作为高级用户保存到您的数据库中)