如何检查用户是否购买了消耗品?

时间:2013-02-22 04:52:37

标签: ios objective-c database mobile idempotent

首先,谢谢大家。

先决条件:我在我的应用程序中提供消耗品项目。 的产品

  1. 列表项
  2. 用户通过iap购买该商品。
  3. 在我的申请收到 updatedTrancactions (交易)之前,网络已断开连接。
  4. 所以我的服务器没有数据来验证收据。用户也无法获得“虚拟货币”。

    有人会告诉我如何解决这个问题,或者给我一些提示。非常感谢。

1 个答案:

答案 0 :(得分:1)

它是标准的客户端 - 服务器问题。如果客户端和服务器之间的连接被切断(由于超时或其他原因),常见的方法是重试请求。但是,如果您的API调用不是Idempotent并且多次调用API会多次影响系统状态,那么我们必须采取更聪明的方法。你有一些选择 -

  1. 拥有本地数据库。购买发生时,首先更新本地数据库中的状态。延迟懒惰地将DB从客户端同步到服务器,我听说coredata或sqlite非常好。用户不知道这一点,因为数据库是本地的,UI对用户来说会非常灵活。
  2. 第二种方法是 - 在HTTP呼叫失败的情况下。你继续重试,直到通话成功。
  3. 如果API是非幂等的,那么您需要有一个令牌的概念。即,如果初始调用仅在失败时再次执行,则首先在服务器端检查具有多次调用相同令牌的API调用。恩。这在银行业解决方案中非常重要。想象一下,由于超时和有人编程继续重试,您的银行帐户会多次扣款!
  4. 这是我现在所能想到的。给它一个旋转并告诉我们什么对你有用......