iPhone应用内购买:收据验证

pt2*_*ph8 3 iphone in-app-purchase

我对交易收据验证有一些疑问:

  • 为什么需要外部服务器?为什么我不能直接从iPhone 联系http://buy.itunes.apple.com
  • 如果此外部服务器已关闭或收据无效,该怎么办?如何将其传达给支付队列?finishTransaction仍然会显示"付款成功"警报视图,因为交易实际上是成功的,我想这会让用户感到困惑.

很抱歉,如果我误解了应用内购买流程或我的问题不够明确.谢谢.

编辑:我想我不应该打电话,finishTransaction如果我发现收据无效,但这是一个问题吗?文档说应用程序应始终调用该函数.此外,在那一刻,钱已经被转移...... 困惑

Jil*_*ouc 8

收据验证可确保交易完成且成功.你不想从iPhone那样做,因为你不能真正信任用户的手机.

  1. 用户启动应用内购买
  2. 完成后,应用程序会要求您的服务器进行验证
  3. 您使用Apple验证收据:如果它有效,您可以执行与购买相关的任何操作(解锁/交付内容,注册订阅......)
  4. 该应用程序从队列中删除该事务(finishTransaction)

如果服务器已关闭,则不应完成事务,而是向用户显示"不可用消息".

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
Run Code Online (Sandbox Code Playgroud)

将在稍后再次调用.

如果您发现收据无效,则应完成关联交易.如果没有,您可能会在事务队列中永久存在额外的事务.这意味着每次您的应用运行时,paymentQueue:updatedTransaction:每次交易都会调用一次...

在我的应用程序中,收据验证是通过Web服务完成的,如果收据无效,则返回错误代码.这就是需要外部服务器的原因.如果用户以某种方式设法跳过收据验证(通过伪造Web服务"成功"响应),他将无法解锁内容/访问功能,因为服务器没有购买的痕迹.