相关疑难解决方法(0)

如何在本地最好地保存InApp购买状态?

我正处于完成我的第一个应用程序的边缘,剩下的最后一件事就是实现IAP计费,这就是为什么我目前正在阅读相关主题(包括加密,混淆和东西等安全问题).

我的应用程序是免费版本,能够通过IAP升级到完整版本,因此只有一个托管购买项目"溢价".我有几个问题:

在Google IAP API示例(trivialdrivesample)中,总是在MainActivity中检查IAP以查看用户是否购买了高级版本,通过

mHelper.queryInventoryAsync(mGotInventoryListener);

我的第一个问题:这是否意味着用户始终需要在应用启动时拥有互联网/数据连接,才能切换到高级版本?如果用户没有互联网连接怎么办?他会选择我猜的精简版,我觉得这很烦人.

所以我想到了如何在SharedPrefs或app数据库中本地保存isPremium状态.现在,我知道你无法阻止黑客对应用程序进行逆向工程,无论如何,即便如此,因为我没有服务器来进行服务器端验证.

然而,一个人根本无法在某处保存"isPremium"标志,因为这太容易被发现.

所以我在考虑这样的事情:

  • 用户购买Premium
  • 应用程序获取IMEI/Device-ID,XOR使用硬编码的String键对其进行编码,并将其保存在应用程序数据库中.

现在,当用户再次启动应用程序时:

  • App从数据库中获取编码的String,对其进行解码并检查decodeString == IMEI.如果是 - >溢价
  • 如果不是,则将调用正常的queryInventoryAsync以查看用户是否购买了premium.

您如何看待这种方法?我知道这不是超级固定,但对我而言,更重要的是用户不会烦恼(比如强制性的互联网连接),而不是应用程序将无法解决(无论如何这是不可能的).你有其他一些提示吗?

另一件事,我目前还不知道,是当用户卸载/重新安装应用程序时如何恢复事务状态.我知道API有一些机制,并且我的数据库可以通过应用程序导出和导入(因此编码的isPremium标志也可以导出/导入).好吧,我猜这将是另一个问题,当时机成熟时;-)

对这种方法的任何想法和评论都是受欢迎的,您认为这是一个很好的解决方案吗?或者我错过了什么/朝着错误的方向前进?

security android in-app-purchase

34
推荐指数
3
解决办法
6392
查看次数

标签 统计

android ×1

in-app-purchase ×1

security ×1