Flutter SDKの呼び出し順序
Adapty().activate() の完了前に他のAdapty SDKメソッドを呼び出してはいけません。activate() が解決するまで、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と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(configuration: ...)にwithCustomerUserIdを設定 | アプリ起動時、ステップ 1 の後。カスタマーユーザー ID がある場合 | 推奨。匿名プロファイルは作成されない。 | | 2b |Adapty().activate(configuration: ...)にwithCustomerUserIdを設定しない | アプリ起動時、ステップ 1 の後。カスタマーユーザー ID がない場合(または収集しない場合) | Adapty が匿名プロファイルを作成する。 | | 3 | 各 MMP に対してAdapty().setIntegrationIdentifier(key: ..., value: ...)を呼び出す | ステップ 2 の後、ユーザーアクション呼び出しの前 | MMP の ID を正しいプロファイルに紐付けるために必須。 | | 4 |await Adapty().identify(customerUserId)| ステップ 3 の後(MMP がない場合はステップ 2 の後)、ステップ 5 の前。パス 2b で認証を行う場合のみ | 必ずawaitを使用する。identify中に並行して呼び出すと#3006 profileWasChangedが発生する。 | | 5 |getPaywall(SDK v4 ではgetFlow)、getPaywallProducts、restorePurchases、makePurchase、updateAttribution、updateProfile|identifyを呼び出す場合はステップ 4 の後、それ以外はステップ 3 の後(MMP がない場合はステップ 2 の後) | これらの呼び出しには安定したプロファイルが必要。 |
これらのステップをスキップすると、復帰ユーザーのプレミアムアクセスが失われたり、プロファイルに appsflyer_id が設定されなかったり、間違ったオーディエンスに対してペイウォールが返されたりする原因になります。
Web2app およびウェブファネル経由のインストール
ユーザーがウェブのチェックアウト(Stripe、Paddle)で購入してからネイティブアプリをインストールする場合、デバイス上で最初に activate() を呼び出すと新しい匿名プロファイルが作成されます。このプロファイルはウェブのプロファイルとは紐付けられません。アプリ起動前に(認証フローやインストールリファラーから)customer user ID を解決できる場合は、activate() に直接渡してください。そうでない場合、identify("YOUR_USER_ID") を呼び出してから restorePurchases を実行するまで、ウェブでの購入はデバイス上で表示されません。
各ウェブチェックアウトで送信するメタデータについては以下をご覧ください。