iOS SDK 调用顺序
Adapty.activate() 必须完成后,才能调用任何其他 Adapty SDK 方法。在其完成之前,SDK 没有任何状态。在 activate() 之前或与其并行发出的任何调用都会失败,并返回 #2002 notActivated 错误。
如果您的应用需要用户登录,并在启动后才能获取到 customer user ID,请在获取到时调用 Adapty.identify()。在 identify 完成之前,不要调用任何需要用户操作的方法。与其并发的调用要么以 #3006 profileWasChanged 错误告终,要么落在激活时创建的匿名用户画像上。一旦发生这种情况,归因数据、appsflyer_id 等 MMP ID 以及安装归属不一定会同步到已识别的用户画像。如果您的应用无需用户登录,跳过 identify,直接使用匿名用户画像即可。
MMP 和分析 SDK(AppsFlyer、Adjust、Branch、PostHog)遵循相同的规则。请先初始化它们,并等待其 UID 回调完成后,再调用 Adapty.activate。否则,MMP ID 会被绑定到一个短暂的匿名用户画像上,而不一定会转移到已识别的用户画像中。有关 AppsFlyer 的详细信息,请参阅 AppsFlyer。
正确的操作顺序
您的路径取决于两件事:何时获取客户用户 ID,以及是否使用 MMP 或分析 SDK。
- 步骤 2 和 5:每个应用都必须执行。先激活 SDK,再调用 SDK 方法。
- 步骤 1 和 3:仅在集成 MMP 或分析 SDK(AppsFlyer、Adjust、Branch、PostHog)时需要。
- 步骤 4:仅在应用需要用户认证、且在启动后才能获取客户用户 ID 时需要。
如果在应用启动时已知客户用户 ID,可直接将其传入
activate()(步骤 2a)。这种方式不会创建匿名用户画像,因此步骤 4 无需执行。 | 步骤 | 调用 | 时机 | 备注 | |------|---------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------| | 1 | 初始化您的 MMP 或分析 SDK(AppsFlyer、Adjust、PostHog、Branch) | 应用启动时,最先执行 | 等待 MMP 的 UID 回调,例如getAppsFlyerUID。 | | 2a |Adapty.activate(with: config),并在 config 中设置customerUserId| 应用启动时,在步骤 1 之后执行,前提是已获取到 customer user ID | 推荐方式。不会创建任何匿名用户画像。 | | 2b |Adapty.activate(with: config),不设置customerUserId| 应用启动时,在步骤 1 之后执行,前提是尚未获取到 customer user ID(或从不收集) | Adapty 会创建一个匿名用户画像。 | | 3 | 为每个 MMP 调用Adapty.setIntegrationIdentifier(key:value:)| 在步骤 2 之后、任何用户操作调用之前 | 必须执行,以确保 MMP ID 关联到正确的用户画像。 | | 4 |try await Adapty.identify("YOUR_USER_ID")| 在步骤 3 之后(若无 MMP 则在步骤 2 之后),在步骤 5 之前——仅适用于走路径 2b 且需要身份验证的情况 | 务必使用await。在identify执行期间并发调用会产生#3006 profileWasChanged错误。 | | 5 |getPaywall、getPaywallProducts、restorePurchases、makePurchase、updateAttribution、updateProfile| 若调用了identify,则在步骤 4 之后执行;否则在步骤 3 之后(若无 MMP 则在步骤 2 之后) | 这些调用需要一个稳定的用户画像。 |
跳过这些步骤会导致回访用户丢失高级访问权限、用户画像缺少 appsflyer_id,以及付费墙匹配到错误的目标受众。
Web2app 与 Web 漏斗安装
如果用户在 Web 结账页面(Stripe、Paddle、FunnelFox)完成购买后再安装原生应用,设备首次调用 activate() 时会创建一个新的匿名用户画像,该画像不会与 Web 用户画像关联。如果你能在应用启动前(通过认证流程或安装引荐来源)获取到 customer user ID,请直接将其传入 activate()。否则,在你调用 identify("YOUR_USER_ID") 并执行 restorePurchases 之前,设备端将无法看到 Web 端的购买记录。
关于每次 Web 结账时需要传递的元数据,请参阅: