【问题标题】:Change a Paid Android app to a Free app with in-app purchasing通过应用内购买将付费 Android 应用更改为免费应用
【发布时间】:2014-01-09 10:51:00
【问题描述】:

我在 Google Play 商店有一个成功的付费应用程序,并希望将此应用程序更新为具有应用程序内购买功能的免费应用程序。

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

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

有没有什么方法可以查看用户的购买历史,确定他们之前已经为应用付费,并在没有应用内购买的情况下解锁额外功能?

感谢您的帮助。 刘易斯

【问题讨论】:

  • 您能找到解决方法吗?我可以通过应用内计费让我的付费应用免费

标签: android google-play


【解决方案1】:

已经一年了,所以 OP 可能不需要这个,但万一其他人遇到这个......

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

想法 1:

您可以对在应用中存储SharedPreference 或其他一些持久性的付费应用进行初步更新(您可以存储 versionCode,这样您就知道要从什么升级,并拥有围绕它的业务逻辑)。然后更新到免费版本,并让免费版本检查您的共享偏好,并在“付费”版本代码的更新上做正确的事情。

想法 2:

您可以将两个应用分开(有一个付费版本和一个免费的应用内购买版本),并将更新推送到付费版本以拥有一个BroadcastReceiver,除了听特定的意图之外什么都不做并让您的应用内购买检查,看看是否有东西会接收您的自定义意图。如果您的旧付费版本存在,那么他们会为此付费,否则他们不会。 (如果他们为付费版本付费然后卸载你显然会遇到问题......)

想法 3:

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

【讨论】:

    【解决方案2】:

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

    如果您真的不想拥有 2 个版本,只需将其免费提供,然后告诉用户“如果您购买了付费版本,请联系我们”。我们会给你兑换码来解锁xxx'。

    【讨论】:

      【解决方案3】:

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

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

      在 Google Play 上,您可以免费下载或定价发布应用。任何 Android 用户都可以在 Google Play 中下载免费应用程序。只有位于支持付费下载的国家/地区并已在 Google Play 中注册了一种付款方式(例如信用卡或运营商直接代扣)的用户才能下载付费应用。

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

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

      【讨论】:

        【解决方案4】:

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

        这为您提供旧版本代码

        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】:

          就我而言(肯定计数器应用程序)

          我的付费应用正在根据 sharepreference 值“lastaffirmationcount”运行

          在我的新 iap 应用程序中,我只是改变了保存肯定计数器值的方式,例如“lastaffirmationscount_foriap”

          所以我在免费应用内购买应用程序中所做的是,只需交叉检查“lastaffirmationcount”值不为空,如果为空则表示新用户,如果不为空则表示他是购买的老用户付费应用

          所以老用户不会永远受苦

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

          【讨论】:

            【解决方案6】:

            对于 Google Play,付费或免费下载应用没有区别。例如,如果用户在免费时下载了一个应用程序,后来又改为付费应用程序,那么该用户仍然可以完全访问它,甚至可以在其他设备上下载它。

            有一些蹩脚的解决方法

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

            也就是说,请记住,许多游戏在一段时间后就免费了。也许用户不会那么介意。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-02-12
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多