首页 > 解决方案 > 使用自己的服务器的 AppStore 应用内购买流程

问题描述

架构

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

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

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

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

标签: iosnode.jsin-app-purchaseapp-storestorekit

解决方案


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

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

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

有关收据验证的更多建议,请参阅此答案。

流程类似于:

  • 3B - 使用 StoreKit 进行购买
  • 3A - 确认付款后更新的交易会发送到应用程序
  • 1A - 应用程序将收据和交易详情发送到您的服务器
  • 2A - 您的服务器通过 Apple 验证收据
  • 2B - 您的服务器根据验证的收据更新用户的余额
  • 1B - 您的服务器向应用程序返回成功状态
  • 3B - 您的应用完成与 StoreKit 的交易

推荐阅读