向早期购买者提供免费功能

Offer free features to earlier buyers

我在 Google Play 商店中有一个付费应用程序。我正在考虑降低该应用程序的价格(某种程度上;不是完全免费)并将其中一项功能作为单独的应用程序内购买提供。

如果我那样做,我就不想把这个功能从已经购买它的任何人那里抢走。

有什么方法可以确定用户购买我的应用程序的日期,或者他们购买的应用程序的原始版本,或类似的东西?我想说的是 "If the app was before the price change (either by date or by version), they should have the feature for free; otherwise, require IAP to unlock the feature."

例如,iOS确实有这样的功能;应用收据包含一个 "originalVersion" 字段,可用于控制对功能的访问。

据我所知,您最多只能找到它的安装日期。 http://developer.android.com/reference/android/content/pm/PackageInfo.html#firstInstallTime


Unfortunately for your customers, this is impossible. There is no API call or anything else to Google Play where you can get the time on which the app was bought.

我知道存在 android-publisher API,但它不提供任何功能来检查它。

您要使用的功能 public 不可用,仅供 Playstore 内部使用!




您可以采取的解决方法:

1.获取应用安装时间

在第一次启动时,您可以检查并解锁功能。

Warning: This system could be abused by changing the time on the device

long installed = context
.getPackageManager()
.getPackageInfo(context.getPackag‌​eName(), 0)
.firstInstallTime;


2。给用户免费密钥

您可以通过邮件或推送通知为每个使用该应用程序的用户提供一个免费密钥


3。立即解锁应用内购买

发布应用更新,免费解锁应用内购买。几周后,您可以以更低的价格发布新版本并解锁功能,就好像您的当前客户已经购买了您的扩展程序一样。

如果您使用某种永久性存储,您或许可以破解此问题。

对于 SharedPreferences,在第一个 运行 上,使用 SharedPreferences.contains() 检查您的一个偏好。如果包含它,则该应用程序必须已经安装。如果不是,请设置另一个首选项将用户标记为新用户,然后再设置一个,这样它就不会每次都进行检查。

这可能只有在首选项没有 "default" 值时才有效,我不完全确定在 xml 中设置默认值是否会将其标记为已包含。

如果您有任何资产转移到 SD,或任何类似的一次性设置,您可以做类似的事情。第一次做之前先看看是否已经完成。

如果您使用的是 SQLite 数据库,如果来自当前版本(或更早版本),您可以增加数据库版本并在 onUpgrade() 中标记为 "paid"。

不过这里有一些陷阱。例如,如果以前的付费客户在安装新版本之前完全卸载,或者它在新设备上。因此你应该:


4。提供支持

在您的应用程序的关于或常见问题解答部分以及您的新版本的第一个 运行 设置一个支持邮件地址,如果客户因为新功能未解锁而遇到任何问题,可以使用该地址。

他们可以提供任何购买证明(账单)。




就像我说的,这些想法是解决方法,但我不知道有任何 "official" 方法可以检查应用安装是升级还是初始安装。

Your best option may be a combination of those four.




仅供参考:我在 Google Cloud Connect 中打开了一个功能 request/idea 用于您可以投票的工作:https://connect.googleforwork.com/ideas/9392(只有拥有付费的 Google 商务帐户才能投票)


我希望这至少能对你有所帮助。