Kotlin Multiplatform SDKの呼び出し順序
Adapty.activate() は、他のAdapty SDKメソッドを呼び出す前に完了している必要があります。完了するまで、SDKには状態がありません。activate() の前または並行して発行された呼び出しは、アクティベーションエラーで失敗します。詳細はKotlin Multiplatform SDKのエラー処理を参照してください。
アプリがユーザー認証を行い、起動後にカスタマーユーザーIDを取得する場合は、そのタイミングで Adapty.identify() を呼び出してください。identify が完了するまで、ユーザー操作に関連するメソッドは呼び出さないでください。identify と競合する呼び出しはエラーを返すか、アクティベーション時に作成された匿名プロファイルに紐付けられます。この状態になると、アトリビューション・appsflyer_id などのMMP ID・インストールの帰属先が、識別済みプロファイルに引き継がれないことがあります。アプリがユーザー認証を行わない場合は、identify を呼び出さず、匿名プロファイルのまま利用を続けてください。
MMP やアナリティクス SDK(AppsFlyer、Adjust、Branch、PostHog)も同様のルールに従います。Adapty.activate を呼び出す前に、これらを先に初期化し、UID コールバックを受け取るまで待ってください。そうしないと、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(configuration = AdaptyConfig.Builder("KEY").withCustomerUserId(...).build()) | アプリ起動時、ステップ 1 の後、customer user ID がある場合 | 推奨。匿名プロファイルは作成されない。 |
| 2b | Adapty.activate(configuration = AdaptyConfig.Builder("KEY").build()) (withCustomerUserId なし) | アプリ起動時、ステップ 1 の後、customer user ID がない場合(または収集しない場合) | Adapty が匿名プロファイルを作成する。 |
| 3 | MMP ごとに Adapty.setIntegrationIdentifier("appsflyer_id", uid) を呼び出す | ステップ 2 の後、ユーザーアクション呼び出しの前 | MMP の ID を正しいプロファイルに紐付けるために必要。 |
| 4 | Adapty.identify("YOUR_USER_ID").onSuccess { ... }.onError { ... } | ステップ 3 の後(MMP がない場合はステップ 2 の後)、ステップ 5 の前 — 認証を使うパス 2b のみ | ユーザーアクション呼び出しの前に onSuccess を待機すること。identify 実行中の並行呼び出しは匿名プロファイルに紐付く可能性がある。 |
| 5 | getPaywall(SDK v4 では getFlow)、getPaywallProducts、restorePurchases、makePurchase、updateAttribution、updateProfile | identify を呼び出す場合はステップ 4 の後、それ以外はステップ 3 の後(MMP がない場合はステップ 2 の後) | これらの呼び出しには安定したプロファイルが必要。 |
これらの手順をスキップすると、復帰ユーザーのプレミアムアクセスが失われたり、プロファイルに appsflyer_id が記録されなかったり、誤ったオーディエンスに対してペイウォールが返されたりする原因になります。
Web2appおよびウェブファネルインストール
ユーザーがウェブチェックアウト(Stripe、Paddle)で購入し、後でネイティブアプリをインストールした場合、デバイスの最初の activate() によって新しい匿名プロファイルが作成されます。このプロファイルはウェブプロファイルとリンクされていません。認証フローやインストールリファラーからアプリ起動前にカスタマーユーザーIDを解決できる場合は、直接 AdaptyConfig.Builder に渡してください。そうしないと、identify("YOUR_USER_ID") を呼び出し、さらに restorePurchases を呼び出すまで、デバイスからウェブ購入が見えない状態になります。
各ウェブチェックアウトで送信するメタデータについては、以下を参照してください: