ios - 使用自己的服务器的 AppStore 应用内购买流程
问题描述
有人可以帮我理解以下架构吗?我有一个 iOS 应用程序和一个应用程序服务器。应用程序和服务器(1A、1B)之间的连接已经在工作。
假设该应用程序的用户有 10 个宝石,出于安全原因,这些宝石由服务器控制。我在 AppStore 中有一个消耗性 IAP 类型:100 个宝石包,用户想购买它。当然,我想在我的 Mongo 数据库中做一个记录,为用户增加 gem 的数量。
这个流程是如何工作的?我应该先在应用程序中使用 StoreKit,然后再与服务器通信吗?或者可以在服务器上创建一个端点,如“/buyPack/100gems”,然后在服务器端做所有事情?据我了解,我需要验证来自 AppStore 的收据,但是从哪里获得它以及它包含什么?
如果您可以使用我的箭头(1A、2A、3B 等),我将不胜感激。
解决方案
购买必须在使用 StoreKit 的 iOS 设备上进行。
当您收到带有.purchased
状态的交易时,您应该检索收据并将其发送到您的服务器进行验证。一旦您的服务器通过 Apple 验证了收据并更新了用户在 MongoDB 中的余额,它应该向应用程序返回成功状态。此时,应用程序应完成与 StoreKit 的交易。
请注意,在您更新数据库之后但在它收到响应并完成事务之前,用户可能会终止应用程序或失去网络连接。在这种情况下,应用程序将在下次启动时再次收到交易。您的服务器应通过检查事务标识符为此做好准备。如果您之前已经处理过交易,请将成功返回给您的应用,以便它可以完成交易但不会再次增加用户的余额。
有关收据验证的更多建议,请参阅此答案。
流程类似于:
- 3B - 使用 StoreKit 进行购买
- 3A - 确认付款后更新的交易会发送到应用程序
- 1A - 应用程序将收据和交易详情发送到您的服务器
- 2A - 您的服务器通过 Apple 验证收据
- 2B - 您的服务器根据验证的收据更新用户的余额
- 1B - 您的服务器向应用程序返回成功状态
- 3B - 您的应用完成与 StoreKit 的交易
推荐阅读
- python - 无法在 VPyhton (GlowScript) 中添加标量和矢量错误
- javascript - 使用角度单击 THREE.js 中的对象
- mysql - Spring Boot 连接到远程 SSH 服务器上的 MySQL
- python - Python:influxdb 的格式化时间
- blueprism - 如何使用蓝色棱镜中的 Enter 键搜索文本
- ruby-on-rails - ActiveRecord::StatementInvalid Exception: PG::UndefinedFunction: ERROR: function jsonb_set(json, unknown, unknown) 不存在
- linux - 在 bash 中捕获 process.kill?
- c++ - 使用级别访问的 c++ 类组织
- hive - 谁在过去 1 个月内访问了 Hive 表
- regex - nginx 正则表达式模式不匹配