StoreKit 2与App Store Server API实战:iOS应用内购与订阅管理完整指南

作者:API传播员 · 2025-10-20 · 阅读时间:5分钟
本文详细介绍了苹果在2021年WWDC大会上推出的StoreKit 2框架,专为iOS应用内购买管理设计。通过简化集成流程,StoreKit 2为开发者提供了更高效的解决方案。文章从服务器端角度出发,讲解了如何使用App Store Server API进行API请求认证、IAP密钥生成、创建JWT令牌、处理签名交易、查询用户订阅状态和交易历史,以及利用服务器通知简化订阅状态管理。

一. API 请求认证

在当前的API版本中,请求需要使用 Shared Secret 进行认证,这是一个可在App Store Connect中获取的固定密钥字符串。而新版 App Store Server API 则采用更安全的 JSON Web Token (JWT) 标准进行认证。

1. IAP 密钥生成

首先,需要创建一个用于请求授权的私钥:

  1. 登录App Store Connect,进入 用户与访问 部分。
  2. 密钥 标签页中,选择“应用内购买密钥类型”并下载新密钥。
  3. 记录 密钥ID,它位于App Store Connect的API标签页中。

2. 创建令牌

接下来,需要生成一个JWT令牌:

  • 创建令牌的具体过程可参考 官方文档
  • 不需要为每次请求都生成新令牌。可以设置最长 60分钟 的有效期,在此期间重复使用同一令牌。

二. StoreKit 2 签名交易

新版 StoreKit 2 API 的所有交易均以 JSON Web Signature (JWS) 格式返回。其结构由三部分组成,以点号分隔:

  1. Base64头部:包含验证交易真实性所需的信息,例如加密算法(alg键)和证书链(x5c键)。
  2. 交易负载:苹果扩展了交易字段,新增:

    • appAccountToken:包含系统用户ID(UUID格式),在客户端初始化购买时设置。
    • offerIdentifier:追踪促销优惠或优惠码使用情况。
    • inAppOwnershipType:判断用户是直接购买(PURCHASED)还是家庭共享获取(FAMILY_SHARED)。
    • type:交易类型(自动续订订阅、消耗型商品等)。
    • revocationDaterevocationReason:记录退款导致的订阅撤销日期与原因。
    • 所有键名均为camelCase,日期使用毫秒级Unix时间戳。

三. App Store 用户订阅状态

要查询用户的订阅状态,可以向以下URL发送GET请求:

https://api.storekit.itunes.apple.com/inApps/v1/subscriptions/{originalTransactionId}

其中,{originalTransactionId} 为用户任意交易链的ID。返回结果包括:

  • status:显示订阅状态(决定是否授予用户付费功能)。

    • 1 表示订阅活跃。
  • SignedTransactionInfo:包含交易链最后一笔交易的信息。
  • SignedRenewalInfo:提供订阅续订信息,用于预测下一个付费周期。

四. 用户交易历史

通过以下URL获取用户的完整交易历史:

https://api.storekit.itunes.apple.com/inApps/v1/history/{originalTransactionId}

返回结果为按时间排序的交易数组:

  • 每次请求最多返回 20笔交易
  • 若有更多交易,hasMore 标志为 true,需通过 revision 参数分页请求。

五. 服务器交易通知

服务器通知帮助开发者实时获取购买、续订、账单问题等信息,从而简化订阅管理。

1. V2版服务器通知的改进

相较于V1,V2的改进包括:

  • 单个用户操作仅触发 一条通知,避免重复。
  • 新增事件类型:OFFER_REDEEMEDEXPIREDGRACE_PERIOD_EXPIRED
  • 改进了 SUBSCRIBEDPRICE_INCREASE 事件。


六. 沙盒环境操作

在测试购买时,需使用沙盒环境URL:

https://api.storekit-sandbox.itunes.apple.com

注意事项:

  • 新版服务器通知暂不支持沙盒环境,未来会提供不同URL区分生产与沙盒。
  • App Store Connect新增了 清除沙盒用户购买历史 功能,无需再新建账号。

七. 结论

苹果通过 StoreKit 2 大幅提升了应用内购和订阅的 服务器端处理体验,核心改进包括:

  • 支持促销优惠与优惠码:便于追踪与分析。
  • 增强分析能力:帮助开发者快速掌握核心指标。
  • 简化迁移:仅需获取 originalTransactionId 即可迁移到新API。

总体而言,StoreKit 2 为iOS开发者提供了更安全、高效的工具,值得尽早集成以优化用户体验。


原文链接: https://adapty.io/blog/storekit-2-api-tutorial/