在 Kotlin Multiplatform SDK 中为自定义付费墙启用购买功能
本指南介绍如何将 Adapty 集成到您的自定义付费墙中。您可以完全掌控付费墙的实现方式,同时由 Adapty SDK 负责获取产品、处理新购买以及恢复历史购买记录。本指南使用 Adapty Kotlin Multiplatform SDK v4(测试版)API——如果您使用的是 v3 版本,请参阅迁移指南了解对应的方法名称。
本指南面向实现自定义付费墙的开发者。 如果你想用最简便的方式开启购买功能,请使用 Adapty Flow Builder。通过 Flow Builder,你可以在无代码可视化编辑器中创建流程,Adapty 自动处理所有购买逻辑,无需重新发布应用即可测试不同设计。
开始之前
设置产品
要启用应用内购买,你需要了解三个关键概念:
- 产品 – 用户可以购买的任何内容(订阅、消耗型商品、永久授权)
- 付费墙 – 定义向用户展示哪些产品的配置。在 Adapty 中,付费墙是获取产品的唯一方式,但这种设计让你无需修改应用代码即可更改产品、价格和优惠。在 SDK v4 中,版位的付费墙变体由一个 flow 对象承载——你获取 flow 并从中查询产品。
- 版位 – 在应用中展示付费墙的位置和时机(如
main、onboarding、settings)。你在看板中为版位配置付费墙,然后在代码中通过版位 ID 请求。这样可以方便地进行 A/B 测试,向不同用户展示不同的付费墙。
即使使用自定义付费墙,也请确保理解这些概念。简单来说,它们就是你在应用中管理销售产品的方式。
要实现自定义付费墙,你需要创建一个付费墙并将其添加到版位中。这样才能获取你的产品。要了解在看板中需要完成哪些操作,请参考这里的快速入门指南。
管理用户
您可以选择是否在后端进行身份验证。
但是,Adapty SDK 对匿名用户和已识别用户的处理方式有所不同。请阅读用户识别快速入门指南,了解其中的具体差异,确保正确处理用户。
第一步:获取产品
要为自定义付费墙获取产品,你需要:
- 通过将版位 ID 传入
getFlow方法来获取flow对象。 - 使用
getPaywallProducts方法获取该流程的产品数组。
fun loadPaywall() {
Adapty.getFlow(placementId = "YOUR_PLACEMENT_ID")
.onSuccess { flow ->
Adapty.getPaywallProducts(flow = flow)
.onSuccess { products ->
// Use products to build your custom paywall UI
}
.onError { error ->
// Handle the error
}
}
.onError { error ->
// Handle the error
}
}
第二步:处理购买
当用户在自定义付费墙中点击某个产品时,调用 makePurchase 方法并传入所选产品。该方法将处理购买流程并返回更新后的用户画像。
fun purchaseProduct(product: AdaptyPaywallProduct) {
Adapty.makePurchase(product = product)
.onSuccess { purchaseResult ->
when (purchaseResult) {
is AdaptyPurchaseResult.Success -> {
val profile = purchaseResult.profile
// Purchase successful, profile updated
}
is AdaptyPurchaseResult.UserCanceled -> {
// User canceled the purchase
}
is AdaptyPurchaseResult.Pending -> {
// Purchase is pending (e.g., user will pay offline with cash)
}
}
}
.onError { error ->
// Handle the error
}
}
步骤 3. 恢复购买
应用商店要求所有包含订阅功能的应用为用户提供恢复购买的途径。
当用户点击恢复购买按钮时,调用 restorePurchases 方法。这将把用户的购买历史与 Adapty 同步,并返回更新后的用户画像。
fun restorePurchases() {
Adapty.restorePurchases()
.onSuccess { profile ->
// Restore successful, profile updated
}
.onError { error ->
// Handle the error
}
}
第四步:检查订阅状态
购买或恢复后,检查用户的访问等级,以决定是否显示付费墙或解锁付费功能。makePurchase 和 restorePurchases 方法已返回更新后的用户画像;在应用的其他地方需要获取当前状态时,请使用 getProfile 方法:
fun checkPremiumAccess() {
Adapty.getProfile()
.onSuccess { profile ->
val hasPremiumAccess = profile.accessLevels["premium"]?.isActive == true
// Grant access to paid features if hasPremiumAccess is true
}
.onError { error ->
// Handle the error
}
}
如需了解检查和监控订阅状态的更多方式(包括监听实时更新),请参阅检查订阅状态。
后续步骤
有疑问或遇到问题?欢迎访问我们的支持论坛,在那里你可以找到常见问题的解答,也可以提出自己的问题。我们的团队和社区随时为你提供帮助!
您的付费墙已准备好在应用中展示。在 App Store 沙盒或 Google Play Store 中测试您的购买,确保能够从付费墙完成测试购买。如需查看生产环境下的完整实现示例,请参阅我们示例应用中的 AppViewModel.kt,其中演示了包含完整错误处理和状态管理的购买流程。