> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adrop.io/llms.txt
> Use this file to discover all available pages before exploring further.

# ターゲティング設定

> オーディエンスターゲティングとコンテキストターゲティングを設定する方法を案内します。

## 概要

Adrop SDKは2種類のターゲティングをサポートしています:

* **オーディエンスターゲティング**: ユーザー属性(性別、年齢、興味など)に基づいて広告をターゲティング
* **コンテキストターゲティング**: コンテンツや画面のコンテキストに応じて広告をターゲティング

ターゲティングを活用すると、ユーザーにより関連性の高い広告を表示でき、広告主は望む対象に効果的に広告を配信できます。

***

## オーディエンスターゲティング

ユーザー属性に基づいて広告をターゲティングできます。

### 1. ターゲティングの作成

まずAdropコンソールでオーディエンスターゲティングを作成してください。

<Card title="ターゲティングの作成" icon="bullseye" href="/ja/targeting/audience">
  コンソールでオーディエンスターゲティングを作成する方法を確認
</Card>

### 2. ユーザーIDの設定

広告レンダリング前にユーザー識別子を設定する必要があります。

<CodeGroup>
  ```swift Swift theme={null}
  import AdropAds

  // ログイン後にユーザーIDを設定
  Adrop.setUID("user_id")
  ```

  ```objc Objective-C theme={null}
  @import AdropAds;

  // ログイン後にユーザーIDを設定
  [Adrop setUID:@"user_id"];
  ```
</CodeGroup>

<Note>
  ターゲティング広告が正常に動作するには、広告枠に入る前にUIDを設定してください。
</Note>

### 3. ユーザープロパティの設定

ユーザー属性を設定すると、より精密なターゲティングが可能になります。

<CodeGroup>
  ```swift Swift theme={null}
  import AdropAds

  // デフォルトプロパティの設定
  AdropMetrics.setProperty(key: AdropKey.GENDER, value: AdropValue.AdropGender.MALE)
  AdropMetrics.setProperty(key: AdropKey.AGE, value: 30)
  AdropMetrics.setProperty(key: AdropKey.BIRTH, value: "19931225")

  // カスタムプロパティの設定（コンソールでの登録が必要）
  AdropMetrics.setProperty(key: "membership", value: "premium")
  AdropMetrics.setProperty(key: "interest_tech", value: true)
  AdropMetrics.setProperty(key: "last_purchase_date", value: "2024-01-15")
  ```

  ```objc Objective-C theme={null}
  @import AdropAds;

  // デフォルトプロパティの設定
  [AdropMetrics setPropertyWithKey:AdropKeyGENDER value:AdropValueAdropGenderMALE];
  [AdropMetrics setPropertyWithKey:AdropKeyAGE value:@30];
  [AdropMetrics setPropertyWithKey:AdropKeyBIRTH value:@"19931225"];

  // カスタムプロパティの設定（コンソールでの登録が必要）
  [AdropMetrics setPropertyWithKey:@"membership" value:@"premium"];
  [AdropMetrics setPropertyWithKey:@"interest_tech" value:@YES];
  [AdropMetrics setPropertyWithKey:@"last_purchase_date" value:@"2024-01-15"];
  ```
</CodeGroup>

<Note>`setProperty()`メソッドは`Encodable`パラメータ型のため、Objective-Cでの利用が制限される場合があります。可能な限りSwiftで属性を設定してください。</Note>

<Warning>
  プロパティ値は単一値（String、Int、Double、Bool）のみサポートしています。配列やディクショナリはサポートされていません。
</Warning>

### デフォルトプロパティ

SDKは一般的に使用される属性に対する事前定義キーを提供します。

#### AdropKey

| キー                | 説明   | 値タイプ                            |
| ----------------- | ---- | ------------------------------- |
| `AdropKey.GENDER` | 性別   | AdropValue.AdropGender          |
| `AdropKey.AGE`    | 年齢   | Int                             |
| `AdropKey.BIRTH`  | 生年月日 | String (YYYY, YYYYMM, YYYYMMDD) |

#### AdropValue

性別に対する事前定義値:

| 値                               | 説明  |
| ------------------------------- | --- |
| `AdropValue.AdropGender.MALE`   | 男性  |
| `AdropValue.AdropGender.FEMALE` | 女性  |
| `AdropValue.AdropGender.OTHER`  | その他 |
| `AdropValue.UNKNOWN`            | 不明  |

<CodeGroup>
  ```swift Swift 例 theme={null}
  // 性別設定
  AdropMetrics.setProperty(key: AdropKey.GENDER, value: AdropValue.AdropGender.MALE)
  AdropMetrics.setProperty(key: AdropKey.GENDER, value: AdropValue.AdropGender.FEMALE)
  AdropMetrics.setProperty(key: AdropKey.GENDER, value: AdropValue.AdropGender.OTHER)

  // 年齢設定
  AdropMetrics.setProperty(key: AdropKey.AGE, value: 25)

  // 生年月日設定
  AdropMetrics.setProperty(key: AdropKey.BIRTH, value: "1999")         // 年のみ
  AdropMetrics.setProperty(key: AdropKey.BIRTH, value: "199903")       // 年月
  AdropMetrics.setProperty(key: AdropKey.BIRTH, value: "19990315")     // 全日付
  ```

  ```objc Objective-C 例 theme={null}
  // 性別設定
  [AdropMetrics setPropertyWithKey:AdropKeyGENDER value:AdropValueAdropGenderMALE];
  [AdropMetrics setPropertyWithKey:AdropKeyGENDER value:AdropValueAdropGenderFEMALE];
  [AdropMetrics setPropertyWithKey:AdropKeyGENDER value:AdropValueAdropGenderOTHER];

  // 年齢設定
  [AdropMetrics setPropertyWithKey:AdropKeyAGE value:@25];

  // 生年月日設定
  [AdropMetrics setPropertyWithKey:AdropKeyBIRTH value:@"1999"];       // 年のみ
  [AdropMetrics setPropertyWithKey:AdropKeyBIRTH value:@"199903"];     // 年月
  [AdropMetrics setPropertyWithKey:AdropKeyBIRTH value:@"19990315"];   // 全日付
  ```
</CodeGroup>

### カスタムプロパティ

コンソールで登録した追加プロパティを設定できます。すべてのカスタムプロパティのキーは文字列で、値はString、Int、Double、Boolタイプをサポートしています。

<CodeGroup>
  ```swift Swift theme={null}
  // 文字列値
  AdropMetrics.setProperty(key: "membership", value: "premium")
  AdropMetrics.setProperty(key: "favorite_category", value: "electronics")

  // 整数値
  AdropMetrics.setProperty(key: "purchase_count", value: 5)
  AdropMetrics.setProperty(key: "loyalty_points", value: 1500)

  // 小数値
  AdropMetrics.setProperty(key: "average_purchase", value: 49.99)

  // ブール値
  AdropMetrics.setProperty(key: "is_subscribed", value: true)
  AdropMetrics.setProperty(key: "newsletter_opt_in", value: false)

  // nilを渡すとプロパティを削除
  AdropMetrics.setProperty(key: "membership", value: nil)
  ```

  ```objc Objective-C theme={null}
  // 文字列値
  [AdropMetrics setPropertyWithKey:@"membership" value:@"premium"];
  [AdropMetrics setPropertyWithKey:@"favorite_category" value:@"electronics"];

  // 整数値
  [AdropMetrics setPropertyWithKey:@"purchase_count" value:@5];
  [AdropMetrics setPropertyWithKey:@"loyalty_points" value:@1500];

  // 小数値
  [AdropMetrics setPropertyWithKey:@"average_purchase" value:@49.99];

  // ブール値
  [AdropMetrics setPropertyWithKey:@"is_subscribed" value:@YES];
  [AdropMetrics setPropertyWithKey:@"newsletter_opt_in" value:@NO];

  // nilを渡すとプロパティを削除
  [AdropMetrics setPropertyWithKey:@"membership" value:nil];
  ```
</CodeGroup>

<Warning>
  カスタムプロパティを使用する前に、必ずコンソールで該当プロパティを登録してください。
</Warning>

### 制約事項

プロパティ設定時には以下の制約事項にご注意ください:

* **単一値のみサポート**: 配列（`[String]`、`[Int]`）やディクショナリ（`[String: Any]`）はサポートされていません。
* **サポートされるタイプ**: String、Int、Double、Boolのみ使用可能です。
* **キーの長さ**: 最大64文字。
* **値の長さ**: 文字列値は最大256文字。
* **最大プロパティ数**: ユーザーごとに最大256個。
* **事前登録が必要**: カスタムプロパティはコンソールで先に登録する必要があります。

```swift theme={null}
// ❌ 誤った使用方法（配列/ディクショナリ）
AdropMetrics.setProperty(key: "interests", value: ["tech", "gaming"])  // サポートされていません
AdropMetrics.setProperty(key: "profile", value: ["age": 25])          // サポートされていません

// ✅ 正しい使用方法
AdropMetrics.setProperty(key: "interest_tech", value: true)
AdropMetrics.setProperty(key: "interest_gaming", value: true)
AdropMetrics.setProperty(key: "age", value: 25)
```

***

## イベントトラッキング

ユーザー行動イベントを追跡して、ユーザーアクションに基づくオーディエンスを構築できます。`AdropMetrics.sendEvent()`を使用してイベントを送信します。

<Note>
  `logEvent()`は非推奨です。代わりに`sendEvent()`を使用してください。
</Note>

### イベント送信

<CodeGroup>
  ```swift Swift theme={null}
  import AdropAds

  // シンプルなイベント（パラメータなし）
  AdropMetrics.sendEvent(name: "app_open")

  // パラメータ付きのイベント
  AdropMetrics.sendEvent(name: "view_item", params: [
      "item_id": "SKU-123",
      "item_name": "Widget",
      "item_category": "Electronics",
      "price": 29.99
  ])
  ```

  ```objc Objective-C theme={null}
  @import AdropAds;

  // シンプルなイベント（パラメータなし）
  [AdropMetrics sendEventWithName:@"app_open" params:nil];

  // パラメータ付きのイベント
  [AdropMetrics sendEventWithName:@"view_item"
                           params:@{
                               @"item_id": @"SKU-123",
                               @"item_name": @"Widget",
                               @"item_category": @"Electronics",
                               @"price": @29.99
                           }];
  ```
</CodeGroup>

### マルチアイテムイベント

複数のアイテムを含むイベント（例: purchase、begin\_checkout）の場合、`"items"`キーの下にディクショナリの配列を渡します。

<CodeGroup>
  ```swift Swift theme={null}
  import AdropAds

  AdropMetrics.sendEvent(name: "purchase", params: [
      "tx_id": "tx_123",
      "currency": "KRW",
      "items": [
          ["item_id": "A", "item_name": "Product A", "price": 100, "quantity": 1],
          ["item_id": "B", "item_name": "Product B", "price": 200, "quantity": 2]
      ]
  ])
  ```

  ```objc Objective-C theme={null}
  @import AdropAds;

  [AdropMetrics sendEventWithName:@"purchase"
                           params:@{
                               @"tx_id": @"tx_123",
                               @"currency": @"KRW",
                               @"items": @[
                                   @{@"item_id": @"A", @"item_name": @"Product A", @"price": @100, @"quantity": @1},
                                   @{@"item_id": @"B", @"item_name": @"Product B", @"price": @200, @"quantity": @2}
                               ]
                           }];
  ```
</CodeGroup>

### サポートされるイベント例

| イベント名             | 説明          | 主なパラメータ                                     |
| ----------------- | ----------- | ------------------------------------------- |
| `app_open`        | アプリ起動       | —                                           |
| `sign_up`         | 会員登録        | `method`                                    |
| `view_item`       | アイテム閲覧      | `item_id`, `item_name`, `price`             |
| `add_to_cart`     | カートに追加      | `item_id`, `item_name`, `price`, `quantity` |
| `add_to_wishlist` | ウィッシュリストに追加 | `item_id`, `item_name`, `price`             |
| `begin_checkout`  | 決済開始        | `currency`, `items`                         |
| `purchase`        | 購入完了        | `tx_id`, `currency`, `items`                |
| `page_view`       | ページ閲覧       | `page_id`, `page_category`                  |
| `click`           | 要素クリック      | `element_id`, `element_type`                |

<Note>
  * イベント名は1〜64文字である必要があります。
  * パラメータキーは1〜64文字である必要があります。
  * 文字列パラメータ値は最大1024文字までです。
  * 同じ名前とパラメータを持つ重複イベントは500ms以内の送信が制限されます。
</Note>

### ユーザーデータ同意

`userDataConsent`を使用して、ユーザーデータのサーバー送信を制御できます。`false`に設定すると、属性データはローカルにのみ保存され、イベントは送信されません。

```swift theme={null}
// 現在の同意状態を確認
let hasConsent = AdropMetrics.userDataConsent

// 同意状態を設定
AdropMetrics.setUserDataConsent(true)
```

<Warning>
  `userDataConsent`が`false`の場合、ターゲティングとイベントトラッキングが機能しません。`setProperty()`や`sendEvent()`を使用する前に同意を`true`に設定してください。
</Warning>

***

## コンテキストターゲティング

コンテンツや画面のコンテキストに応じて広告をターゲティングできます。

### 1. ターゲティングの作成

まずAdropコンソールでコンテキストターゲティングを作成してください。

<Card title="コンテキストターゲティングの作成" icon="tags" href="/ja/targeting/context">
  コンソールでコンテキストターゲティングを作成する方法を確認
</Card>

### 2. 広告枠に値を設定

コンソールで設定したContext IDを広告読み込み時に渡します。

#### バナー広告

<CodeGroup>
  ```swift Swift theme={null}
  import AdropAds

  // contextIdはイニシャライザで設定（読み取り専用プロパティ）
  let banner = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: "sport")
  banner.load()
  ```

  ```objc Objective-C theme={null}
  @import AdropAds;

  // contextIdはイニシャライザで設定
  AdropBanner *banner = [[AdropBanner alloc] initWithUnitId:@"YOUR_UNIT_ID" contextId:@"sport"];
  [banner load];
  ```
</CodeGroup>

#### ネイティブ広告

<CodeGroup>
  ```swift Swift theme={null}
  import AdropAds

  class ViewController: UIViewController {
      private var nativeAd: AdropNativeAd?

      func loadAd() {
          // contextIdはイニシャライザで設定
          nativeAd = AdropNativeAd(unitId: "YOUR_UNIT_ID", contextId: "tech")
          nativeAd?.delegate = self
          nativeAd?.load()
      }
  }
  ```

  ```objc Objective-C theme={null}
  @import AdropAds;

  @interface ViewController ()
  @property (nonatomic, strong) AdropNativeAd *nativeAd;
  @end

  @implementation ViewController

  - (void)loadAd {
      // contextIdはイニシャライザで設定
      self.nativeAd = [[AdropNativeAd alloc] initWithUnitId:@"YOUR_UNIT_ID" contextId:@"tech"];
      self.nativeAd.delegate = self;
      [self.nativeAd load];
  }

  @end
  ```
</CodeGroup>

#### インタースティシャル広告

<CodeGroup>
  ```swift Swift theme={null}
  import AdropAds

  class ViewController: UIViewController {
      private var interstitial: AdropInterstitialAd?

      func loadAd() {
          interstitial = AdropInterstitialAd(unitId: "YOUR_UNIT_ID")
          // Note: contextIdはInterstitialAdでは使用できません
          interstitial?.delegate = self
          interstitial?.load()
      }
  }
  ```

  ```objc Objective-C theme={null}
  @import AdropAds;

  @interface ViewController ()
  @property (nonatomic, strong) AdropInterstitialAd *interstitial;
  @end

  @implementation ViewController

  - (void)loadAd {
      self.interstitial = [[AdropInterstitialAd alloc] initWithUnitId:@"YOUR_UNIT_ID"];
      // Note: contextIdはInterstitialAdでは使用できません
      self.interstitial.delegate = self;
      [self.interstitial load];
  }

  @end
  ```
</CodeGroup>

#### リワード広告

<CodeGroup>
  ```swift Swift theme={null}
  import AdropAds

  class ViewController: UIViewController {
      private var rewarded: AdropRewardedAd?

      func loadAd() {
          rewarded = AdropRewardedAd(unitId: "YOUR_UNIT_ID")
          // Note: contextIdはRewardedAdでは使用できません
          rewarded?.delegate = self
          rewarded?.load()
      }
  }
  ```

  ```objc Objective-C theme={null}
  @import AdropAds;

  @interface ViewController ()
  @property (nonatomic, strong) AdropRewardedAd *rewarded;
  @end

  @implementation ViewController

  - (void)loadAd {
      self.rewarded = [[AdropRewardedAd alloc] initWithUnitId:@"YOUR_UNIT_ID"];
      // Note: contextIdはRewardedAdでは使用できません
      self.rewarded.delegate = self;
      [self.rewarded load];
  }

  @end
  ```
</CodeGroup>

### 動的コンテキスト設定

画面やコンテンツに応じて動的にコンテキストを設定できます。

```swift theme={null}
import UIKit
import AdropAds

class ArticleViewController: UIViewController {
    private var banner: AdropBanner?
    var articleCategory: String?  // 記事カテゴリ

    override func viewDidLoad() {
        super.viewDidLoad()

        // contextIdはイニシャライザで設定（読み取り専用プロパティ）
        let contextId = articleCategory ?? ""
        banner = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: contextId)

        banner?.delegate = self
        view.addSubview(banner!)
        banner?.load()
    }
}

// 使用例
let sportArticle = ArticleViewController()
sportArticle.articleCategory = "sport"

let techArticle = ArticleViewController()
techArticle.articleCategory = "tech"
```

### SwiftUIでのコンテキスト設定

```swift theme={null}
import SwiftUI
import AdropAds

struct ArticleView: View {
    let category: String

    var body: some View {
        VStack {
            Text("記事の内容")

            // カテゴリに応じて動的にコンテキストを設定
            AdropBannerRepresented(
                unitId: "YOUR_UNIT_ID",
                contextId: category
            )
            .frame(width: 320, height: 100)
        }
    }
}

// 使用例
struct ContentView: View {
    var body: some View {
        TabView {
            ArticleView(category: "sport")
                .tabItem { Label("スポーツ", systemImage: "sportscourt") }

            ArticleView(category: "tech")
                .tabItem { Label("テクノロジー", systemImage: "cpu") }

            ArticleView(category: "business")
                .tabItem { Label("ビジネス", systemImage: "chart.line.uptrend.xyaxis") }
        }
    }
}
```

***

## 全体の例

### オーディエンスターゲティング 全体の例

```swift theme={null}
import UIKit
import AdropAds

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        // SDKの初期化
        Adrop.initialize(production: false)

        // ユーザーログイン後にUIDを設定
        Adrop.setUID("user_12345")

        // 基本ユーザープロパティの設定
        AdropMetrics.setProperty(key: AdropKey.GENDER, value: AdropValue.AdropGender.MALE)
        AdropMetrics.setProperty(key: AdropKey.AGE, value: 28)
        AdropMetrics.setProperty(key: AdropKey.BIRTH, value: "19960315")

        // カスタムプロパティの設定
        AdropMetrics.setProperty(key: "membership", value: "premium")
        AdropMetrics.setProperty(key: "interest_tech", value: true)
        AdropMetrics.setProperty(key: "interest_sports", value: true)
        AdropMetrics.setProperty(key: "purchase_count", value: 15)

        // アプリ起動イベントの送信
        AdropMetrics.sendEvent(name: "app_open")

        return true
    }
}

class ProductViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // 商品閲覧イベント
        AdropMetrics.sendEvent(
            name: "view_item",
            params: [
                "item_id": "PROD_123",
                "category": "electronics",
                "price": 299.99
            ]
        )
    }

    @IBAction func addToCartTapped(_ sender: UIButton) {
        // カートに追加イベント
        AdropMetrics.sendEvent(
            name: "add_to_cart",
            params: [
                "item_id": "PROD_123",
                "quantity": 1,
                "price": 299.99
            ]
        )
    }

    func completePurchase() {
        // 購入完了イベント
        AdropMetrics.sendEvent(
            name: "purchase",
            params: [
                "transaction_id": "T67890",
                "value": 299.99,
                "currency": "USD"
            ]
        )

        // 購入回数の更新
        let newPurchaseCount = 16
        AdropMetrics.setProperty(key: "purchase_count", value: newPurchaseCount)
    }
}
```

### コンテキストターゲティング 全体の例

```swift theme={null}
import UIKit
import AdropAds

// ニュースアプリの例: 記事カテゴリに応じて異なる広告を表示
class NewsArticleViewController: UIViewController {
    private var banner: AdropBanner?

    // 記事情報
    var article: Article?

    struct Article {
        let id: String
        let title: String
        let category: String  // "sport", "tech", "business", "entertainment"
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        setupBanner()
        loadArticle()
    }

    private func setupBanner() {
        // contextIdは読み取り専用 — イニシャライザで設定
        let contextId = article?.category ?? ""
        banner = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: contextId)

        banner?.delegate = self

        if let bannerView = banner {
            view.addSubview(bannerView)
            bannerView.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.activate([
                bannerView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
                bannerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
                bannerView.widthAnchor.constraint(equalToConstant: 320),
                bannerView.heightAnchor.constraint(equalToConstant: 100)
            ])
        }

        banner?.load()
    }

    private func loadArticle() {
        // 記事閲覧イベントの送信
        if let article = article {
            AdropMetrics.sendEvent(
                name: "view_article",
                params: [
                    "article_id": article.id,
                    "category": article.category
                ]
            )
        }
    }
}

extension NewsArticleViewController: AdropBannerDelegate {
    func onAdReceived(_ banner: AdropBanner) {
        print("カテゴリ '\(article?.category ?? "")' ターゲット広告の読み込み成功")
    }

    func onAdFailedToReceive(_ banner: AdropBanner, _ errorCode: AdropErrorCode) {
        print("広告の読み込み失敗: \(errorCode)")
    }

    func onAdImpression(_ banner: AdropBanner) {
        print("広告インプレッション")
    }

    func onAdClicked(_ banner: AdropBanner) {
        print("広告クリック")
    }
}

// 使用例
let sportArticle = NewsArticleViewController()
sportArticle.article = NewsArticleViewController.Article(
    id: "A123",
    title: "プレミアリーグ試合結果",
    category: "sport"
)

let techArticle = NewsArticleViewController()
techArticle.article = NewsArticleViewController.Article(
    id: "A124",
    title: "新しいAI技術が発表",
    category: "tech"
)
```

***

## ベストプラクティス

### 1. UIDの設定タイミング

ユーザーがログインしたらすぐにUIDを設定してください。

```swift theme={null}
// ログイン成功時
func didLoginSuccessfully(userId: String) {
    Adrop.setUID(userId)

    // ユーザープロパティも一緒に設定
    AdropMetrics.setProperty(key: "is_logged_in", value: true)
}

// ログアウト時
func didLogout() {
    Adrop.setUID("")  // UIDのリセット
    AdropMetrics.setProperty(key: "is_logged_in", value: false)
}
```

### 2. プロパティの一貫性維持

ユーザープロパティは、アプリ起動時または値が変更されるたびに設定してください。

```swift theme={null}
class UserManager {
    func updateUserProfile(profile: UserProfile) {
        // プロフィール情報更新時にプロパティを同期
        AdropMetrics.setProperty(key: AdropKey.AGE, value: profile.age)
        AdropMetrics.setProperty(key: "membership", value: profile.membershipLevel)
        AdropMetrics.setProperty(key: "interest_\(profile.mainInterest)", value: true)
    }
}
```

### 3. 意味のあるイベント送信

重要なユーザーアクションのみをイベントとして送信してください。

```swift theme={null}
// ✅ 良い例: 意味のあるアクション
AdropMetrics.sendEvent(name: "purchase", params: ["value": 99.99])
AdropMetrics.sendEvent(name: "level_complete", params: ["level": 10])
AdropMetrics.sendEvent(name: "tutorial_complete")

// ❌ 悪い例: 過度なイベント
AdropMetrics.sendEvent(name: "button_tapped")  // 汎用的すぎる
AdropMetrics.sendEvent(name: "scroll")         // 頻度が高すぎる
```

### 4. コンテキストIDの一貫性

コンテキストIDはコンソールに登録した値と正確に一致する必要があります。

```swift theme={null}
// ✅ 良い例: 明確で一貫性のあるID（イニシャライザで設定）
let sportBanner = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: "sport")
let techBanner = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: "tech")
let bizBanner = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: "business")

// ❌ 悪い例: 不一致または曖昧なID
let banner1 = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: "Sport")  // 大文字小文字の不一致
let banner2 = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: "technology")  // コンソールの値と異なる
let banner3 = AdropBanner(unitId: "YOUR_UNIT_ID", contextId: "category_1")  // 意味が不明確
```

***

## 次のステップ

<CardGroup cols={2}>
  <Card title="バナー広告" href="/ja/sdk/ios/banner">
    バナー広告にターゲティングを適用
  </Card>

  <Card title="ネイティブ広告" href="/ja/sdk/ios/native">
    ネイティブ広告にターゲティングを適用
  </Card>

  <Card title="オーディエンスターゲティングの作成" icon="bullseye" href="/ja/targeting/audience">
    コンソールでオーディエンスターゲティングを作成
  </Card>

  <Card title="コンテキストターゲティングの作成" icon="tags" href="/ja/targeting/context">
    コンソールでコンテキストターゲティングを作成
  </Card>
</CardGroup>
