Skip to content

iOS — App Store 内购(ROPayAppStore) ​

验收状态

源码候选已建立,但没有正式业务模块发布 Tag / 远程 Reposilite 版本,也没有完成真实游戏项目签名与第三方服务端联调。 单模块 CI 或五模块共存编译不能等同上线验收。生产接入必须以实测、正式版本和固定游戏协议为准。

模块目录:Modules/ROPayAppStore。基于系统 StoreKit 1 兼容 iOS 12+;支付与 Apple ID / Google 登录相互独立。

商品与交易监听 ​

ruby
pod 'ROPayAppStore', :path => '<本机roios-sdk>/Modules/ROPayAppStore'
objc
[[ROPayAppStore shared] startObservingWithCallback:^(ROPayAppStoreTransaction *tx) {
    // Purchased / Restored:把 transactionId 和收据送业务服务端验单。
    // Purchasing / Deferred:继续等待,不可发货。
    // Failed:区分取消、商店错误或网络中断。
}];
[[ROPayAppStore shared] requestProducts:@[@"game.coins.small"]
    completion:^(NSArray *products, NSError *error) {
        // 根据正式商店配置商品展示商品与本地化价格。
    }];
// 校验产品已查询、支付允许后,在前台调用:
[[ROPayAppStore shared] purchaseProduct:@"game.coins.small" error:NULL];

服务端验单与幂等发货 ​

  1. 客户端成功只表示交易状态变化,必须通过后台验证 App Store 交易,并以 transactionId 作唯一履约键。
  2. 服务端确认并完成幂等发货之后,宿主才调用 finishVerifiedTransaction:。网络失败不能提前 finish。
  3. 恢复流程 restorePurchasesWithCompletion: 会返回恢复完成/失败,逐笔交易仍通过观察者转发;重启可能收到未完成交易。
  4. 服务端应处理商店通知、退款、撤销、订阅和消耗型商品策略。示例没有这些后端功能,不能代替正式履约。

真实测试必须用 App Store Connect 产品、Sandbox/TestFlight 账号、签名和后端。

每个能力独立发布与接入;正式项目验收必须使用真实游戏环境。