2014-01-09 47 views
7

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

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

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

是否有任何方法检查用户的购买历史记录,确定他们之前是否为应用付费过,并在没有应用内购买的情况下解锁额外功能?

感谢您的任何帮助。 刘易斯

+0

你不能做到这一点 – Goofy

+0

你能找到一个解决办法?我处于同一位置,可以通过应用结算方式免费获得付费应用 – abedfar

回答

4

它已经过了一年,所以OP可能不需要这个,但万一别人发生在这一个...

你可以处理这个几个方法。很明显,您的新应用内购买应用有一些业务逻辑来跟踪谁已付/未付款。所以这两种方式我看你能去这个问题如下:

理念1:

你可以做一个初步的更新您的付费应用程序,存储SharedPreference或一些其他持久性应用程序(你可以存储versionCode,所以你知道你要升级什么,并且有业务逻辑)。然后更新到免费版本,并有免费版本检查您的共享偏好,并从“付费”versionCode更新做正确的事情。

理念2:

你可以保留两个独立的应用程序(有付费版本,并在应用内购买免费)和推送更新到付费版本有一个BroadcastReceiver并没有真正除了听特定的意图之外别做任何事情,并进行应用内购买检查,看看是否有东西会接收到您的定制意图。如果您的旧付费版本存在,那么他们就会付钱,如果不是这样的话。 (如果他们支付的付费版然后卸载你就会有很明显的问题...)

理念3:

你可以保留两个独立的应用程序(有付费版本,并在 - 免费应用程序购买),并将更新推送到付费版本,只需发布​​Intent以打开应用程序内购买应用程序(如果已安装)并附带一些特殊参数,让他们知道他们通过付费应用程序打开了应用程序,并执行正确操作把它们设置为在应用程序中支付它的东西。打开自己了一些检测问题,但...(可解,但那种笨重)

0

对于Google Play而言,支付应用程序或免费下载应用程序并无区别。例如,如果用户在免费下载应用程序的情况下下载应用程序,并且以后更改为付费应用程序,则该用户仍可以完全访问该应用程序,甚至可以在其他设备上下载该应用程序。

有一些跛变通为:

  • 启用付费版本google play game services并试图说服用户连接到它。使用谷歌播放服务,将“付费购买”信息存储到云中,并在用户登录时将其恢复。
  • 给所有购买了某些密钥的用户解锁功能
  • 为免费版本创建一个不同的游戏

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

1

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

如果您确实不想拥有2个版本,只需将其免费并告诉用户“如果您购买了付费版本,请与我们联系。我们会给你兑换代码解锁xxx'。

0

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

此链接似乎有关,希望它有助于

在谷歌Play上,您可以发布应用程序免费下载或定价。 Google Play中的任何Android用户均可下载免费应用。付费应用程序只能由位于支持付费下载的国家/地区的用户下载,并且可以在Google Play中注册一种付款方式,例如信用卡或Direct Carrier结算。

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

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

0

我觉得最简单的方法是使用密码

这给你的旧版本代码

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

这给你的当前版本的代码theese行

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

现在你可以比较和做你想做的事情。不要忘记,每次 与这行代码后更新

prefs.edit().putInt(PREF_VERSION_CODE_KEY, currentVersionCode).commit(); 
相关问题