背景
兑换码(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")
}
)
效果图如下。
🚀 技上心头,加油~
参考资料
Supporting subscription offer codes in your app | Apple Developer Documentation
Set up offer codes - Manage subscriptions - App Store Connect - Help - Apple Developer