Capacitor 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)も同じルールに従います。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)。この方法では匿名プロファイルが作成されないため、ステップ 4 は不要です。 | ステップ | 呼び出し | タイミング | 備考 | |------|---------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------| | 1 | MMP またはアナリティクス SDK(AppsFlyer、Adjust、PostHog、Branch)を初期化する | アプリ起動時、最初に実行 | MMP の UID コールバック(例:getAppsFlyerUID)を待機してください。 | | 2a | adapty.activate({ apiKey: '...', params: { customerUserId: '...' } }) | アプリ起動時、ステップ 1 の後、customer user ID がある場合 | 推奨。匿名プロファイルは作成されません。 | | 2b | adapty.activate({ apiKey: '...' })customerUserId なし) | アプリ起動時、ステップ 1 の後、customer user ID がない場合(または収集しない場合) | Adapty が匿名プロファイルを作成します。 | | 3 | 各 MMP に対して adapty.setIntegrationIdentifier({ key: '...', value: '...' }) | ステップ 2 の後、ユーザーアクションの呼び出し前 | MMP の ID を正しいプロファイルに紐付けるために必要です。 | | 4 | await adapty.identify({ customerUserId: 'YOUR_USER_ID' }) | ステップ 3 の後(MMP がない場合はステップ 2 の後)、ステップ 5 の前 — 認証ありのパス 2b のみ | 必ず await してください。identify 中に並列で呼び出すと #3006 profileWasChanged が発生します。 | | 5 | getPaywall(SDK v4 では getFlow)、getPaywallProductsrestorePurchasesmakePurchaseupdateAttributionupdateProfile | identify を呼び出す場合はステップ 4 の後、そうでない場合はステップ 3 の後(MMP がない場合はステップ 2 の後) | これらの呼び出しには安定したプロファイルが必要です。 |

これらのステップをスキップすると、復帰ユーザーのプレミアムアクセスが失われたり、プロファイルに appsflyer_id が設定されなかったり、誤ったオーディエンスに対してペイウォールが返されたりする原因になります。

Web2appとウェブファネルのインストール

ユーザーがウェブチェックアウト(Stripe、Paddle)で購入し、後でネイティブアプリをインストールした場合、デバイスで最初に呼ばれる activate() は新しい匿名プロファイルを作成します。このプロファイルはウェブのプロファイルとは紐付けられません。アプリ起動前に(認証フローやインストールリファラーなどから)カスタマーユーザーIDを取得できる場合は、そのIDを直接 activate() に渡してください。そうでない場合、identify({ customerUserId: 'YOUR_USER_ID' }) を呼び出してから restorePurchases を実行するまで、ウェブでの購入はデバイス上では確認できません。

各ウェブチェックアウトで送信するメタデータについては、以下を参照してください: