AppStore 应用内购买流程与自己的服务器

AppStore in-app purchase flow with own server

谁能帮助我理解以下架构?我有一个 iOS 应用程序和一个应用程序服务器。应用程序和服务器 (1A, 1B) 之间的连接已经在工作。

假设应用程序的用户有 10 个宝石,出于安全原因,这些宝石由服务器控制。我在 AppStore 中有一个消耗型 IAP 类型:100 宝石包,用户想购买它。当然,我想在我的Mongo数据库中做一个记录,以增加用户的宝石数量。

这个流程是如何运作的?我应该先在应用程序中使用 StoreKit 然后再与服务器通信吗?或者可以在服务器上创建一个像“/buyPack/100gems”这样的端点并在服务器端做所有事情?据我所知,我需要验证来自 AppStore 的收据,但是从哪里获得它以及它包含什么?

如果您能使用我的箭头(1A、2A、3B 等),我将不胜感激。

购买必须在使用 StoreKit 的 iOS 设备上进行。

当您收到状态为 .purchased 的交易时,您应该检索收据并将其发送到您的服务器进行验证。一旦您的服务器通过 Apple 验证了收据并在 MongoDB 中更新了用户的余额,它应该 return 应用程序的成功状态。此时应用程序应完成与 StoreKit 的交易。

请注意,在您更新数据库之后但在收到响应并完成交易之前,应用程序可能会被用户终止或失去网络连接。在这种情况下,应用程序将在下次启动时再次接收交易。您的服务器应该通过检查事务标识符为此做好准备。如果您之前已经处理过交易,return 成功您的应用程序可以完成交易但不会再次增加用户的余额。

有关收据验证的更多建议,请参阅 this answer

流程是这样的:

  • 3B - 使用 StoreKit 进行购买
  • 3A - 一旦确认付款,更新的交易就会传送到 App
  • 1A - 应用将收据和交易详情发送到您的服务器
  • 2A - 您的服务器通过 Apple 验证收据
  • 2B - 您的服务器根据经过验证的收据更新用户的余额
  • 1B - 您的服务器 return 应用成功
  • 3B - 您的应用完成了与 StoreKit 的交易