メインコンテンツへスキップ

概要

Adrop SDKは2種類のターゲティングをサポートしています:
  • オーディエンスターゲティング: ユーザー属性(性別、年齢、興味など)に基づいて広告をターゲティング
  • コンテキストターゲティング: コンテンツや画面のコンテキストに応じて広告をターゲティング
ターゲティングを活用すると、ユーザーにより関連性の高い広告を表示でき、広告主は望む対象に効果的に広告を配信できます。

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

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

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

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

ターゲティングの作成

コンソールでオーディエンスターゲティングを作成する方法を確認

2. ユーザーIDの設定

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

// ログイン後にユーザーIDを設定
Adrop.setUID("user_id")
ターゲティング広告が正常に動作するには、広告枠に入る前にUIDを設定してください。

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

ユーザー属性を設定すると、より精密なターゲティングが可能になります。
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")
プロパティ値は単一値(String、Int、Bool)のみサポートしています。配列やディクショナリはサポートされていません。

デフォルトプロパティ

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不明
// 性別設定
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")     // 全日付

カスタムプロパティ

コンソールで登録した追加プロパティを設定できます。すべてのカスタムプロパティのキーは文字列で、値はString、Int、Boolタイプをサポートしています。
// 文字列値
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: "is_subscribed", value: true)
AdropMetrics.setProperty(key: "newsletter_opt_in", value: false)
カスタムプロパティを使用する前に、必ずコンソールで該当プロパティを登録してください。

制約事項

プロパティ設定時には以下の制約事項にご注意ください:
  • 単一値のみサポート: 配列([String][Int])やディクショナリ([String: Any])はサポートされていません。
  • サポートされるタイプ: String、Int、Boolのみ使用可能です。
  • 事前登録が必要: カスタムプロパティはコンソールで先に登録する必要があります。
// ❌ 誤った使用方法(配列/ディクショナリ)
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()を使用してイベントを送信します。
logEvent()は非推奨です。代わりにsendEvent()を使用してください。

イベント送信

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
])

マルチアイテムイベント

複数のアイテムを含むイベント(例: purchase、begin_checkout)の場合、"items"キーの下にディクショナリの配列を渡します。
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]
    ]
])

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

イベント名説明主なパラメータ
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
  • イベント名は1〜64文字である必要があります。
  • パラメータキーは1〜64文字である必要があります。
  • 文字列パラメータ値は最大1024文字までです。
  • 同じ名前とパラメータを持つ重複イベントは500ms以内の送信が制限されます。

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

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

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

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

コンテキストターゲティングの作成

コンソールでコンテキストターゲティングを作成する方法を確認

2. 広告枠に値を設定

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

バナー広告

import AdropAds

let banner = AdropBanner(unitId: "YOUR_UNIT_ID")
banner.contextId = "sport"  // コンテキストIDの設定
banner.load()

ネイティブ広告

import AdropAds

class ViewController: UIViewController {
    private var adLoader: AdropNativeAdLoader?

    func loadAd() {
        adLoader = AdropNativeAdLoader(unitId: "YOUR_UNIT_ID")
        adLoader?.contextId = "tech"  // コンテキストIDの設定
        adLoader?.delegate = self
        adLoader?.loadAd()
    }
}

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

import AdropAds

class ViewController: UIViewController {
    private var interstitial: AdropInterstitialAd?

    func loadAd() {
        interstitial = AdropInterstitialAd(unitId: "YOUR_UNIT_ID")
        interstitial?.contextId = "news"  // コンテキストIDの設定
        interstitial?.delegate = self
        interstitial?.load()
    }
}

リワード広告

import AdropAds

class ViewController: UIViewController {
    private var rewarded: AdropRewardedAd?

    func loadAd() {
        rewarded = AdropRewardedAd(unitId: "YOUR_UNIT_ID")
        rewarded?.contextId = "game"  // コンテキストIDの設定
        rewarded?.delegate = self
        rewarded?.load()
    }
}

動的コンテキスト設定

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

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

    override func viewDidLoad() {
        super.viewDidLoad()

        banner = AdropBanner(unitId: "YOUR_UNIT_ID")

        // 記事カテゴリに応じてコンテキストを設定
        if let category = articleCategory {
            banner?.contextId = category  // "sport", "tech", "business" など
        }

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

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

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

SwiftUIでのコンテキスト設定

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") }
        }
    }
}

全体の例

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

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)
    }
}

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

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() {
        banner = AdropBanner(unitId: "YOUR_UNIT_ID")

        // 記事カテゴリをコンテキストIDに設定
        if let category = article?.category {
            banner?.contextId = category
        }

        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を設定してください。
// ログイン成功時
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. プロパティの一貫性維持

ユーザープロパティは、アプリ起動時または値が変更されるたびに設定してください。
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. 意味のあるイベント送信

重要なユーザーアクションのみをイベントとして送信してください。
// ✅ 良い例: 意味のあるアクション
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はコンソールに登録した値と正確に一致する必要があります。
// ✅ 良い例: 明確で一貫性のあるID
banner?.contextId = "sport"
banner?.contextId = "tech"
banner?.contextId = "business"

// ❌ 悪い例: 不一致または曖昧なID
banner?.contextId = "Sport"  // 大文字小文字の不一致
banner?.contextId = "technology"  // コンソールの値と異なる
banner?.contextId = "category_1"  // 意味が不明確

次のステップ