---
title: "Unity SDKでの初回起動時にAA対象ペイウォールを表示する"
description: "AdaptyProfile.AppliedExternalAttributionProvidersを使用して、UnityでApple Adsのアトリビューションを待ってからペイウォールをリクエストする方法。"
---

> **AI agents**: to search Adapty docs faster and with fewer tokens, install the Adapty skill. Claude Code (self-updating via plugin): `claude plugin marketplace add adaptyteam/adapty-skills && claude plugin install adapty-skills@adapty` — other tools: `npx skills add adaptyteam/adapty-skills --all`

この記事は、アプリのiOSビルドに適用されます。Apple Adsのアトリビューションは、iOSのみで利用できます。

Apple Ads (AA) のアトリビューションは `Adapty.Activate()` の後に非同期で届きます。`GetFlow` を早い段階で呼び出すと、アトリビューションがまだ反映されていないことが多く、Adapty はデフォルトのオーディエンスに対してプレースメントを解決するため、AA セグメント向けのペイウォールがスキップされてしまいます。`AdaptyProfile.AppliedExternalAttributionProviders` を使うと、AA のアトリビューションがプロファイルに適用されたタイミングをアプリ側で検知できるため、AA セグメントが正しく解決されるまでペイウォールのリクエストを待機させることができます。

:::important
`AppliedExternalAttributionProviders` はApple Adsのみを報告します。他のプロバイダーからのアトリビューションはユーザープロファイルで確認でき、セグメントフィルターでも利用可能ですが、ここではまだ表示されません。
:::

## 始める前に \{#before-you-start\}

必要なもの：
- Adapty Unity SDK **4.1** 以降。
- Adapty でアプリの Apple Ads が設定済みであること。[Apple Ads](apple-search-ads) を参照してください。

:::note
例では SDK 4.1 の API 名を使用しています。SDK 4.0 では、プロファイルのプロパティ名は `AppliedAttributionSources` です。SDK 3.x では、そのプロパティは同じ旧名称を持ち、ペイウォールは `GetPaywall`/`GetPaywallForDefaultAudience` で取得され、`AdaptyPaywall` が返されます。[Adapty Unity SDK を v4 へ移行する](migration-to-unity-sdk-v4) を参照してください。
:::

## 仕組み \{#how-it-works\}

`Adapty.Activate()` を呼び出すと、SDK はバックグラウンドで Apple Ads のアトリビューション情報を Apple にリクエストし、その結果を Adapty のバックエンドに転送します。AA がプロファイルのアクティブなアトリビューションソースになると、SDK は更新された `AdaptyProfile` を `OnLoadLatestProfile` ハンドラーに配信し、その `AppliedExternalAttributionProviders` リストに `AdaptyExternalAttributionProvider.AppleAds` が含まれます。

リストが空の場合、以下のいずれかを意味します。

- Apple Ads のアトリビューションがこのプロファイルに対してまだ処理されていない。
- アトリビューションがまったく届いていない。
- 別のプロバイダーからアトリビューションが届いているが、このリストには反映されない。

リストが空であっても、`GetFlow` の呼び出しは安全です。Adapty は現在のプロファイル状態に一致するオーディエンス（通常はデフォルトのオーディエンス）に基づいてリクエストを解決します。

:::important
この待機は**初回起動時のみ**適用されます。Apple Ads のアトリビューションが一度記録されると、プロファイルに永続的に保存されます。2回目以降の起動では、キャッシュ済みプロファイルにすでに `AppliedExternalAttributionProviders` 内に `AppleAds` が含まれているため、`OnLoadLatestProfile` はその値とともに即座に発火し、`GetFlow` は遅延なく Apple Ads セグメント対象のペイウォールを返します。
:::

## 実装 \{#implementation\}

初回起動時は、プロファイル内の `AdaptyExternalAttributionProvider.AppleAds` を監視し、ハードタイムアウトを設定してください。Apple Ads のアトリビューションが届かない場合でも、該当ユーザーにはペイウォールを表示する必要があります。

1. **SDKを有効化します。** [Unity SDKのインストールと設定](sdk-installation-unity)を参照してください。
2. **`IAdaptyEventListener`を実装し、`Adapty.SetEventListener`に登録することで、プロファイルの更新を購読します。** リスナーをまだ設定していない場合は、[サブスクリプションの更新を監視する](unity-check-subscription-status#listen-to-subscription-updates)を参照してください。
3. **`AppliedExternalAttributionProviders`に`AppleAds`が現れるのを監視します。** これが表示されたら、ペイウォールをリクエストします — AdaptyはAAセグメント済みのバリアントを返します：

```csharp
using System.Linq;

public void OnLoadLatestProfile(AdaptyProfile profile)
{
    if (profile.AppliedExternalAttributionProviders.Contains(AdaptyExternalAttributionProvider.AppleAds))
    {
        // load the paywall via Adapty.GetFlow(placementId, ...)
    }
}
```

4. **サブスクリプションと並行して3〜5秒のタイマーを開始します。** タイマーが`AppleAds`の受信より先に発火した場合は、代わりに`GetFlowForDefaultAudience`を使用してデフォルトオーディエンスのペイウォールをリクエストしてください。このメソッドはセグメンテーションを待たずにペイウォールを返します。

どちらのパスが先に実行されても、そのパスでペイウォールをロードし、もう一方のパスはスキップしてください。ペイウォールが2回フェッチされないよう、単一のステートフラグ（例：`hasLoadedPaywall`）で重複処理を防いでください。ネットワークリクエストが失敗しても、ユーザーが詰まらないよう、そのプレースメントには[フォールバックペイウォール](unity-use-fallback-paywalls)を設定してください。

`SetEventListener` はリスナーを1つだけ受け付けます。アプリがすでに他の目的（例：[サブスクリプションの更新を監視する](unity-check-subscription-status#listen-to-subscription-updates)など）で `IAdaptyEventListener` を使用している場合は、2つ目のリスナーを登録するのではなく、既存の `OnLoadLatestProfile` にチェックを追加してください。