首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将应用程序中的项目数据存储在设备上

问将应用程序中的项目数据存储在设备上
EN

Stack Overflow用户
提问于 2014-06-06 19:07:43
回答 2查看 316关注 0票数 3

我想添加应用程序中的购买功能到我的应用程序,我想知道什么是建议的方式来存储一个产品的可用计数(例如100硬币)。

具有根访问权限的用户可以:

  • 访问/操作应用程序存储的未加密数据(以便他可以更改硬币的数量)。
  • 保存加密(或混淆)数据,然后在他有更多硬币时替换它以恢复状态。

因此,即使使用加密,欺骗也相对容易。我的问题是:

  • 我应该走得更远吗?(值得这么做吗?)
  • 用户滥用这一点是很常见的吗?
  • 有更好的方法来存储物品计数吗?
  • 练习是什么?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-14 23:33:02

在本地存储您的游戏世界货币,让交易在没有网络连接的情况下在本地发生,但是当用户重新连接到互联网时,将本地的硬币与服务器显示的已购买的货币进行协调。

基本上,当你有一个网络连接,下载任何购买的应用程序中的产品从谷歌。检查您的库存,然后消费任何产品应该减少根据用户所做的离线。完成此操作后,如果本地总数与服务器显示的内容(消费后)之间存在差异,则将其标记为潜在的黑客。否则,你很好(一切平衡)。

当使用像这样的可消费的应用程序产品(听起来就像你想做的那样),真的没有完全的离线方式来做到这一点。你依赖于谷歌的应用程序计费服务,所以你必须不时地检查他们的服务器,以调节/刷新购买的库存。来自谷歌的应用程序中的计费文档

要记录购买消费,请将consumePurchase方法发送到应用程序内计费服务,并传入标识要删除的采购的purchaseToken字符串值。purchaseToken是Google服务在成功的购买请求之后在INAPP_PURCHASE_DATA字符串中返回的数据的一部分。在本例中,您将记录令牌变量中使用purchaseToken标识的产品的消耗量。 int response = mService.consumePurchase(3, getPackageName(), token); 警告:不要在主线程上调用consumePurchase方法。调用此方法将触发可能阻塞主线程的网络请求。相反,创建一个单独的线程,并从该线程内部调用consumePurchase方法。 您有责任控制和跟踪应用程序中的产品是如何提供给用户的。例如,如果用户购买的是游戏货币,您应该用购买的货币数量更新玩家的库存。

至于如何在离线时存储和管理库存,您提到的方法听起来不错。加密并不有害,但可能是不必要的,只要你与谷歌在合理的时间内和解。只有很小一部分人真正尝试利用应用程序。大多数用户不会根植,而对于那些这样做的用户,大多数用户实际上根本不知道如何实现这些漏洞。如果你还在担心,是的,继续加密吧。这应该足以让绝大多数用户保持诚实。

票数 4
EN

Stack Overflow用户

发布于 2014-11-06 02:05:12

即使你在离线时用字符串加密你的密码,并在本地存储,那些花了更多精力的人仍然能够反向设计你的应用程序,找出破解密码的字符串。混淆你的应用只是为了让黑客更加努力,但不是不可能。否则,黑客就根本不存在了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24088992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档