Meet the App Store Server Library
App Store & Distribution 进阶 20m

认识 App Store Server Library:内购服务器端开发利器

Meet the App Store Server Library

2023年6月5日

在 Apple 官方观看视频

一句话判断

如果你在做 IAP 的服务端验证和管理,App Store Server Library 能帮你把 JWT 生成、签名验证、收据迁移这些苦力活一行搞定。

这场 Session 讲了什么

Dave 和 Alex 介绍了 App Store Server Library——一个旨在简化 App Store 服务端 API 集成的官方库。核心能力有四项:

App Store Server API 集成。库自动处理 JWT 生成,让你直接调用十几个 Server API 端点,最核心的是 Get Transaction History,可以获取用户的完整内购交易记录。

签名数据验证。StoreKit 的签名数据(JWS 格式)包含交易信息和续订状态。库提供了 SignedDataVerifier 来验证这些数据确实由 Apple 签发,防止伪造。

收据迁移工具。从旧的 verifyReceipt 端点迁移到新 API 的过渡方案——从 app receipt 中提取 transaction ID,然后用 Server API 获取完整信息。

订阅促销签名。用你的内购私钥自动生成促销优惠签名,省去手动实现的麻烦。

库支持 Swift、Java、Node.js、Python 四种语言,已在 GitHub 开源。

值得深挖的点

JWT 生成的简化程度。手动生成 JWT 需要处理 ES256 签名、Header/Payload 构造、过期时间管理等细节。用库的话,只需要提供 issuer ID、key ID 和私钥,一行代码就能创建 API 客户端。

签名验证的必要性。Session 强调了在三个场景下必须验证签名数据:设备端解锁内容时、服务端收到签名数据时、收到 Server API 响应时。跳过验证等于信任任何声称来自 Apple 的数据。

从 verifyReceipt 迁移的路径。老端点返回的是一个巨大的 receipt payload,新 API 返回的是结构化的 JWS。库提供的 extract receipt transaction 工具可以帮你平滑过渡:先从老收据中提取 transaction ID,再用新 API 查完整信息。

代码片段

// Java 示例:创建 API 客户端并发送测试通知
AppStoreServerAPIClient client = new AppStoreServerAPIClient(
    issuerId,    // 从 App Store Connect 获取
    keyId,       // 生成密钥时获得
    privateKey,  // 只能下载一次!
    bundleId,
    Environment.SANDBOX
);

// 请求发送测试通知
Response<Map<String, String>> response = client.requestTestNotification();
String token = response.get("testNotificationToken");
System.out.println("测试通知令牌: " + token);
// Swift 示例:验证签名数据
let verifier = SignedDataVerifier(
    rootCertificates: rootCerts,
    bundleId: "com.example.app",
    appAppleId: 1234567890,
    environment: .sandbox
)

// 验证 JWS 交易数据
let transaction = try await verifier.verifyTransaction(
    signedTransaction: jwsString
)
// 验证通过后可以安全地使用 transaction 中的信息

最佳实践

  • 私钥只能在 App Store Connect 下载一次,务必安全存储。如果怀疑泄露,立刻重新生成。
  • 开发阶段从 sandbox 和 TestFlight 开始,不要直接用生产环境测试。
  • 定期更新 Apple 根证书,库的验证依赖这些证书。
  • 所有从客户端或通知收到的签名数据,在信任其内容之前都必须验证。
  • GitHub 上的库欢迎社区反馈和贡献,遇到问题可以提 issue。

还有什么值得关注

  • App Store Server Notifications V2 的通知本身也是签名的,需要同样的验证流程
  • appTransaction 包含了用户最初购买 App 的版本信息,对业务分析很有价值
  • Session 提到库的设计理念是”今天和未来的 API 都能用”,暗示后续 API 更新会同步到库中
  • “Subscription Offers Best Practices” Session 有促销优惠的完整说明
WWDC 2023