iOS 订阅兑换码的实现

1,201 阅读1分钟

背景

兑换码(offer code)是一种有效的获取用户的方法,在订阅产品上使用,App Store 官方支持申请 offer code 对订阅进行推销。本文主要介绍开发的实现过程。

基本特性

  • 由字母和数字组成,可以随机生成、自定义
  • 在 App Store Connect 创建
  • 支持免费、打折
  • 支持自定义有效周期

兑换方式

  • 兑换途径:在 app store 输入 code、在 app 内输入 code、使用专用 code 链接

流程

创建 offer code

用户兑换 code

对 transaction 进行响应

在应用启动时对 transaction 的更新进行实时监听,并处理新的 transaction

updateListenerTask = Task.detached {

      for await verification in  Transaction.updates {
        do {

          try await self.handle(verification)

        } catch {
        print(error)
        }
    }

可以通过 transaction 的 offer type 和 offer id 进行是否为兑换码的判断。

let isCode = transaction.offerType == .code
let code: String? = transaction.offerID

对 transaction 进行验证

PS:因为使用 StoreKit2 自带了 transaction 的验证,理论上这一步可选的。

根据业务的需要,可以在 server 对 transaction 进行验证,通过后再交付 feature,并完成交易

await transaction.finish()

在 app 内提供兑换入口

PS:这一步可选的 可以根据业务需要在不同位置提供入口,弹出系统的兑换码入口。以下是 SwiftUI 的调用示例代码。

Button("Redeem Code") {
  showsRedeemCodeSheet = true
}
.offerCodeRedemption(
      isPresented: $showsRedeemCodeSheet,
      onCompletion: { result in
        customDump(result, name: "offerCodeRedemption result")
    }
 )

效果图如下。

Xcode Preview

🚀 技上心头,加油~

参考资料

Supporting subscription offer codes in your app | Apple Developer Documentation

Set up offer codes - Manage subscriptions - App Store Connect - Help - Apple Developer