---
title: "iOS SDKの呼び出し順序"
description: "Adapty SDKのメソッドを正しい順序で呼び出すことで、プレミアムアクセスの喪失、アトリビューションの欠落、断続的な #2002 エラーを防ぎます。"
---

`Adapty.activate()` が完了するまで、他のAdapty SDKメソッドを呼び出してはいけません。解決されるまで、SDKには状態がありません。`activate()` の前または並行して発行された呼び出しはすべて [`#2002 notActivated`](ios-sdk-error-handling#network-errors) で失敗します。

アプリがユーザー認証を行い、起動後にカスタマーユーザーIDを取得する場合は、そのタイミングで `Adapty.identify()` を呼び出してください。`identify` が解決するまでユーザーアクションメソッドを呼び出さないでください。`identify` と競合する呼び出しは [`#3006 profileWasChanged`](ios-sdk-error-handling#general-errors) で失敗するか、アクティベーション時に作成された匿名プロファイルに対して実行されます。これが起きると、アトリビューション、`appsflyer_id` などのMMP ID、インストールの帰属が識別済みプロファイルに転送されないことがあります。アプリがユーザー認証を行わない場合は、`identify` をスキップして匿名プロファイルのまま使用してください。

MMP・アナリティクスSDK（AppsFlyer、Adjust、Branch、PostHog）も同じルールに従います。それらを先に初期化し、UIDコールバックを待ってから `Adapty.activate` を呼び出してください。そうしないと、MMP IDが短命な匿名プロファイルに紐づき、識別済みプロファイルに常に転送されるとは限りません。AppsFlyerの詳細については、[AppsFlyer](appsflyer) を参照してください。

## 正しい順序 \{#the-correct-order\}

どのパスを取るかは、カスタマーユーザー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   | `Adapty.activate(with: config)` に `customerUserId` をconfigに設定して呼び出す                                       | アプリ起動時、ステップ1の後、カスタマーユーザーIDがある場合                             | 推奨。匿名プロファイルは一切作成されません。                                             |
| 2b   | `Adapty.activate(with: config)` に `customerUserId` を設定せずに呼び出す                                                      | アプリ起動時、ステップ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`、`updateAttribution`、`updateProfile`  | `identify` を呼び出す場合はステップ4の後、それ以外はステップ3の後（またはMMPがない場合はステップ2の後）      | これらの呼び出しには安定したプロファイルが必要です。                                                             |

:::important
これらのステップを省略すると、リターンユーザーのプレミアムアクセスの喪失、プロファイルへの `appsflyer_id` の欠落、間違ったオーディエンスに対してペイウォールが返される問題が発生します。
:::

## Web2appとWebファネルのインストール \{#web2app-and-web-funnel-installs\}

ユーザーがWebチェックアウト（Stripe、Paddle、FunnelFox）で購入し、その後ネイティブアプリをインストールする場合、デバイスで最初に `activate()` が呼ばれると新しい匿名プロファイルが作成されます。このプロファイルはWebプロファイルとリンクされていません。アプリ起動前にカスタマーユーザーIDを解決できる場合（認証フローやインストールリファラーから）、`activate()` に直接渡してください。そうしないと、`identify("YOUR_USER_ID")` を呼び出してから `restorePurchases` を実行するまで、Web購入はデバイスから見えません。

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

- [Stripe](stripe)
- [Paddle](paddle)