从 Superwall 迁移

从 Superwall 迁移到 Adapty 通常只需约两小时。你只需替换 SDK、将应用商店服务器通知指向 Adapty,然后发布新版本即可。付费订阅用户的权益会自动保留——Adapty 在用户首次启动时即可从 App Store 和 Google Play 收据中恢复。

你的订阅用户将自动完成迁移 所有曾经激活过订阅的用户,只要打开集成了 Adapty SDK 的新版应用,就会自动迁移到 Adapty。订阅状态验证和高级访问权限会自动恢复。

本指南的结构

迁移共分六个步骤:

  1. 将 Superwall 概念映射到 Adapty (5 分钟)
  2. 安装 Adapty SDK (15 分钟)
  3. 替换 SDK 调用 (1 小时)
  4. 切换 App Store 和 Google Play 服务器通知 (5 分钟)
  5. 测试与发布 (30 分钟)
  6. (可选)导入历史数据

将 Superwall 概念映射到 Adapty

大多数 Superwall 概念在 Adapty 中都有对应的概念:

SuperwallAdapty变更说明
Campaign版位 + 目标受众Campaign 逻辑拆分为版位(位置)和目标受众(规则)。
Placement版位概念相同,名称相同。
Audience filter目标受众规则集位于版位内部。
Entitlement访问等级命名标识符(例如 premium)。
WebView paywall付费墙编辑工具付费墙由 Adapty SDK 原生渲染,而非使用 WKWebView
PurchaseController内置无需实现协议 —— Adapty 自动处理购买流程。
Feature gating访问等级检查检查 profile.accessLevels["premium"]?.isActive
在接触代码之前,有两个思维转变值得注意:
  • 获取与展示是两个独立步骤:Superwall 的 register 方法在一次调用中完成付费墙获取、营销活动评估和 UI 展示。Adapty 将这些步骤拆分开来——你需要先获取付费墙,拿到其配置,再进行展示。虽然多了几行代码,但这让你可以预加载配置、显示自定义加载状态,或根据自己的逻辑取消展示。
  • 订阅状态按访问等级区分:Superwall 暴露单一的 subscriptionStatus 发布属性。Adapty 返回一个包含命名访问等级的 AdaptyProfile,因此同一用户可以同时持有 sportsscience 两个独立的访问等级。如需同步读取,建议从 AdaptyDelegate 缓存用户画像,而不是每次视图加载时都调用 getProfile()

安装 Adapty SDK

为你的平台安装 Adapty SDK —— iOSAndroidReact NativeFlutterKotlin MultiplatformUnityCapacitor —— 同时从项目中移除 SuperwallKit。

替换 SDK 调用

逐一检查集成的各个部分,将 Superwall 调用替换为对应的 Adapty 调用。每个小节末尾都附有链接,涵盖全部七个平台的 SDK——请根据你的应用选择对应链接。

初始化 SDK

Superwall.configure 替换为 Adapty.activate

请查阅适用于你所在平台的安装指南 —— iOSAndroidReact NativeFlutterKotlin MultiplatformUnityCapacitor

识别和登出用户

Superwall.shared.identify 替换为 Adapty.identify,将 Superwall.shared.reset 替换为 Adapty.logout。两个 SDK 都会在首次启动时生成匿名用户画像,因此只有在用户登录或登出时才需要调用这些方法。识别用户后需重新获取付费墙——新用户可能会匹配到不同的目标受众。 请参阅适用于您平台的识别指南 — iOSAndroidReact NativeFlutterKotlin MultiplatformUnityCapacitor

获取并展示付费墙

Superwall.shared.register 替换为两步流程:先用 Adapty.getPaywall 获取付费墙,再用 AdaptyUI.getPaywallConfiguration 加载其视图配置,最后进行展示。

需要注意两点区别:

  • 功能门控取代了 feature: 闭包:付费墙关闭后,检查返回的用户画像(或通过 Adapty.getProfile 获取)上的有效访问等级,再据此进行分支处理。
  • 付费墙由 SDK 渲染:Superwall 在 WKWebView 中渲染付费墙。Adapty 则通过付费墙编辑工具以原生方式渲染付费墙——字体、产品信息和按钮均由 SDK 直接绘制。 请参阅适用于您平台的付费墙快速入门 — iOSAndroidReact NativeFlutterKotlin MultiplatformUnityCapacitor

检查订阅状态

Superwall.shared.subscriptionStatus 替换为对用户画像中指定访问等级的检查:profile.accessLevels["premium"]?.isActive。通过 AdaptyDelegate.didLoadLatestProfile(_:) 监听变更,而非使用 @Published 属性模式,并在本地缓存用户画像以便同步读取。 请参阅适用于您平台的订阅状态指南 — iOSAndroidReact NativeFlutterKotlin MultiplatformUnityCapacitor

处理购买与恢复

使用付费墙编辑工具时,两个 SDK 都会在付费墙界面内自动处理购买流程——此步骤可跳过

对于自定义付费墙,Superwall 需要实现 PurchaseController,而 Adapty 不需要:将 PurchaseController.purchase 替换为 Adapty.makePurchase,将 PurchaseController.restorePurchases 替换为 Adapty.restorePurchases。SDK 会自行处理验证逻辑。 请参阅适用于您平台的自定义付费墙快速入门指南 — iOSAndroidReact NativeFlutterKotlin MultiplatformUnityCapacitor

设置用户属性

Superwall.shared.setUserAttributes 替换为 Adapty.updateProfile

请参阅适用于您平台的用户属性指南 — iOSAndroidReact NativeFlutterKotlin MultiplatformUnityCapacitor

切换 App Store 和 Google Play 服务器通知

将应用商店的服务器通知指向 Adapty。Adapty 不依赖这些通知也能正常运行,但分析数据、第三方集成以及 A/B 测试数据图表都需要它们:

测试与发布

发布前,请逐一确认以下各项:

  • 已配置 Adapty 看板(产品、付费墙、版位、访问等级)
  • 已安装 Adapty SDK
  • 已将 Superwall SDK 调用替换为 Adapty 等效调用
  • 已将 App Store 和 Google Play 服务器通知指向 Adapty
  • 已完成沙盒购买
  • 已提交新版本应用

请参阅发布检查清单进行最终验证。

(可选)导入历史数据

Superwall 并不拥有您的订阅状态——App Store 和 Google Play 才是。Adapty 在首次启动时会验证收据,因此付费用户无需任何导入即可保留其访问权限。

如果您希望将历史交易数据回填到 Adapty 分析中,请参考向 Adapty 导入历史数据。建议在 SDK 发布后至少等待一周,以便 SDK 有足够时间收集最新的购买价格。

常见问题

不更新应用的订阅者会怎样?

大多数用户会在夜间自动更新应用,因此使用旧版本的用户比例会迅速下降。留在旧版本的订阅者可以直接通过 App Store 或 Google Play 继续使用其权益,无需强制更新。

我的 Superwall 活动目标受众会自动迁移吗?

不会。Superwall 的受众过滤器和 Adapty 的目标受众分别在不同的看板中配置,且使用不同的标识符。请在 Adapty 的版位中重新创建你的定向规则,作为目标受众进行设置。大多数应用只有一两个版位(用户引导和通用应用内触发),因此重建工作通常很快就能完成。

Adapty 是否有与 getPresentationResult 等效的方法?

没有单独的调用方法。如需判断某个版位是否会显示付费墙,请调用 Adapty.getPaywall(placementId:) 并根据结果进行分支处理。若调用成功,说明该用户的目标受众已分配付费墙;若调用失败(原因是未配置付费墙),则跳过展示并执行备用逻辑。