Android SDKの呼び出し順序
Adapty.activate() が完了してから、他のAdapty SDKメソッドを呼び出す必要があります。完了するまでSDKは状態を持ちません。activate() の前または並行して発行された呼び出しはすべて ADAPTY_NOT_INITIALIZED で失敗します。
アプリがユーザーを認証し、起動後にカスタマーユーザーIDを取得する場合は、そのタイミングで Adapty.identify() を呼び出してください。identify の完了コールバックが発火するまで、ユーザー操作に関わるメソッドを呼び出さないようにしてください。identify と競合する呼び出しは、コールバックでエラーが返るか、アクティベーション時に作成された匿名プロファイルに対して処理されます。この状態になると、アトリビューション、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)AdaptyConfig.Builder に渡してください。このパスでは匿名プロファイルが作成されないため、ステップ4は不要です。
| ステップ | 呼び出し | タイミング | 備考 |
|---|---|---|---|
| 1 | MMP またはアナリティクス SDK(AppsFlyer、Adjust、PostHog、Branch)を初期化する | アプリ起動時、最初に実行 | MMP の UID コールバック(例:getAppsFlyerUID)を待機すること。 |
| 2a | Adapty.activate(context, AdaptyConfig.Builder("KEY").withCustomerUserId(...).build()) | アプリ起動時、ステップ 1 の後に実行。カスタマーユーザー ID が取得済みの場合 | 推奨。匿名プロファイルは作成されない。 |
| 2b | Adapty.activate(context, AdaptyConfig.Builder("KEY").build()) (customerUserId なし) | アプリ起動時、ステップ 1 の後に実行。カスタマーユーザー ID がない場合(または収集しない場合) | Adapty が匿名プロファイルを作成する。 |
| 3 | Adapty.setIntegrationIdentifier(AdaptyIntegrationIdentifier.appsflyerId(uid)) { error -> ... } | ステップ 2 の後、ユーザーアクションの呼び出し前に実行 | MMP の ID を正しいプロファイルに紐付けるために必須。複数の MMP をまとめて設定する場合はリストで渡す。 |
| 4 | Adapty.identify("YOUR_USER_ID") { error -> ... } | ステップ 3 の後(MMP なしの場合はステップ 2 の後)、ステップ 5 の前に実行。パス 2b で認証を行う場合のみ | コールバックを使用すること。identify 実行中に並行して呼び出すと、匿名プロファイルに処理が紐付く可能性がある。 |
| 5 | getPaywall、getPaywallProducts、restorePurchases、makePurchase、updateExternalAttribution、updateProfile | identify を呼び出す場合はステップ 4 の後、それ以外はステップ 3 の後(MMP なしの場合はステップ 2 の後) | これらの呼び出しには安定したプロファイルが必要。 |
これらのステップをスキップすると、再インストールユーザーのプレミアムアクセスが失われたり、プロファイルに appsflyer_id が記録されなかったり、誤ったオーディエンスに対してペイウォールが返されたりする原因となります。
Web2appおよびウェブファネル経由のインストール
ユーザーがウェブチェックアウト(Stripe、Paddle)で購入し、後からネイティブアプリをインストールした場合、デバイス初回の activate() により新しい匿名プロファイルが作成されます。このプロファイルはウェブプロファイルとは紐付けられません。認証フローやインストールリファラーなどからアプリ起動前にカスタマーユーザーIDを解決できる場合は、AdaptyConfig.Builder に直接渡してください。それ以外の場合、identify("YOUR_USER_ID") を呼び出して restorePurchases を実行するまで、ウェブでの購入はデバイス上に表示されません。
各ウェブチェックアウトで送信するメタデータについては、以下を参照してください。