iOS SDKの呼び出し順序
Adapty.activate() が完了するまで、他のAdapty SDKメソッドを呼び出してはいけません。解決されるまで、SDKには状態がありません。activate() の前または並行して発行された呼び出しはすべて #2002 notActivated で失敗します。
アプリがユーザー認証を行い、起動後にカスタマーユーザーIDを取得する場合は、そのタイミングで Adapty.identify() を呼び出してください。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点によって決まります。
- ステップ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 | customerUserId をコンフィグに設定した上で Adapty.activate(with: config) を呼ぶ | アプリ起動時、ステップ 1 の後。カスタマーユーザー ID がある場合 | 推奨。匿名プロファイルは作成されない。 |
| 2b | customerUserId なしで Adapty.activate(with: config) を呼ぶ | アプリ起動時、ステップ 1 の後。カスタマーユーザー ID がない場合(または収集しない場合) | Adapty が匿名プロファイルを作成する。 |
| 3 | 各 MMP に対して Adapty.setIntegrationIdentifier(...) を呼ぶ | ステップ 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、updateExternalAttribution、updateProfile | identify を呼ぶ場合はステップ 4 の後、そうでない場合はステップ 3 の後(MMP がなければステップ 2 の後) | これらの呼び出しには安定したプロファイルが必要。 |
これらのステップを省略すると、リターンユーザーのプレミアムアクセスの喪失、プロファイルへの appsflyer_id の欠落、間違ったオーディエンスに対してペイウォールが返される問題が発生します。
Web2appとWebファネルのインストール
ユーザーがWebチェックアウト(Stripe、Paddle、FunnelFox)で購入し、その後ネイティブアプリをインストールする場合、デバイスで最初に activate() が呼ばれると新しい匿名プロファイルが作成されます。このプロファイルはWebプロファイルとリンクされていません。アプリ起動前にカスタマーユーザーIDを解決できる場合(認証フローやインストールリファラーから)、activate() に直接渡してください。そうしないと、identify("YOUR_USER_ID") を呼び出してから restorePurchases を実行するまで、Web購入はデバイスから見えません。
各Webチェックアウトで送信するメタデータについては、以下を参照してください: