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

概要

インタースティシャル広告は、アプリの画面全体を覆う形で表示される広告です。ゲームのレベル移行、コンテンツページの切り替えなど、アプリの自然な遷移ポイントで表示するのに適しています。

特徴

  • 全画面を覆う没入型広告
  • ユーザーが明示的に閉じるまで維持
  • 画像および動画広告に対応
  • 高い視覚的注目度
開発環境ではテストユニットIDを使用してください: PUBLIC_TEST_UNIT_ID_INTERSTITIAL

実装手順

インタースティシャル広告は次の4ステップで実装します:
  1. 初期化 - AdropInterstitialAdインスタンスの生成
  2. デリゲートの設定 - 広告イベント受信のためのデリゲート設定
  3. 広告の読み込み - 広告リクエストと受信
  4. 広告の表示 - 画面への広告表示

UIKit実装

基本実装

import AdropAds

class ViewController: UIViewController {
    private var interstitialAd: AdropInterstitialAd?

    override func viewDidLoad() {
        super.viewDidLoad()
        loadInterstitialAd()
    }

    // 1. 広告の初期化と読み込み
    private func loadInterstitialAd() {
        interstitialAd = AdropInterstitialAd(unitId: "YOUR_UNIT_ID")
        interstitialAd?.delegate = self
        interstitialAd?.load()
    }

    // 2. 広告の表示
    private func showInterstitialAd() {
        guard let interstitialAd = interstitialAd,
              interstitialAd.isLoaded else { return }
        interstitialAd.show(fromRootViewController: self)
    }
}

isLoadedプロパティ

広告が読み込まれたかを確認するプロパティです。show()呼び出し前にこの値を確認することをお勧めします。
if interstitialAd?.isLoaded == true {
    interstitialAd?.show(fromRootViewController: self)
}

デリゲートの実装

extension ViewController: AdropInterstitialAdDelegate {
    // 広告受信成功 (必須)
    func onAdReceived(_ ad: AdropInterstitialAd) {
        print("インタースティシャル広告受信完了")
        // 広告が準備できたら表示
        showInterstitialAd()
    }

    // 広告受信失敗 (必須)
    func onAdFailedToReceive(_ ad: AdropInterstitialAd, _ errorCode: AdropErrorCode) {
        print("インタースティシャル広告受信失敗: \(errorCode)")
    }

    // 広告表示 (オプション)
    func onAdImpression(_ ad: AdropInterstitialAd) {
        print("インタースティシャル広告表示")
    }

    // 広告クリック (オプション)
    func onAdClicked(_ ad: AdropInterstitialAd) {
        print("インタースティシャル広告クリック")
    }

    // インタースティシャル広告が表示される直前 (オプション)
    func onAdWillPresentFullScreen(_ ad: AdropInterstitialAd) {
        print("インタースティシャル広告表示直前")
    }

    // インタースティシャル広告が表示された直後 (オプション)
    func onAdDidPresentFullScreen(_ ad: AdropInterstitialAd) {
        print("インタースティシャル広告表示完了")
    }

    // インタースティシャル広告が閉じる直前 (オプション)
    func onAdWillDismissFullScreen(_ ad: AdropInterstitialAd) {
        print("インタースティシャル広告閉じる直前")
    }

    // インタースティシャル広告が閉じた直後 (オプション)
    func onAdDidDismissFullScreen(_ ad: AdropInterstitialAd) {
        print("インタースティシャル広告閉じた")
        // 次の広告を事前読み込み
        loadInterstitialAd()
    }

    // インタースティシャル広告表示失敗 (オプション)
    func onAdFailedToShowFullScreen(_ ad: AdropInterstitialAd, _ errorCode: AdropErrorCode) {
        print("インタースティシャル広告表示失敗: \(errorCode)")
    }
}

SwiftUI実装

SwiftUIではUIViewControllerRepresentableを使用するか、UIWindowからrootViewControllerを取得して表示できます。

方法1: ViewModelパターン

import SwiftUI
import AdropAds

// ViewModel
class InterstitialAdViewModel: ObservableObject {
    @Published var isAdReady = false
    @Published var isAdShowing = false

    private var interstitialAd: AdropInterstitialAd?

    init() {
        loadAd()
    }

    func loadAd() {
        interstitialAd = AdropInterstitialAd(unitId: "YOUR_UNIT_ID")
        interstitialAd?.delegate = self
        interstitialAd?.load()
    }

    func showAd() {
        guard let interstitialAd = interstitialAd,
              let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
              let rootViewController = windowScene.windows.first?.rootViewController else {
            return
        }

        interstitialAd.show(fromRootViewController: rootViewController)
    }
}

// Delegate
extension InterstitialAdViewModel: AdropInterstitialAdDelegate {
    func onAdReceived(_ ad: AdropInterstitialAd) {
        DispatchQueue.main.async {
            self.isAdReady = true
        }
    }

    func onAdFailedToReceive(_ ad: AdropInterstitialAd, _ errorCode: AdropErrorCode) {
        print("広告受信失敗: \(errorCode)")
    }

    func onAdDidPresentFullScreen(_ ad: AdropInterstitialAd) {
        DispatchQueue.main.async {
            self.isAdShowing = true
        }
    }

    func onAdDidDismissFullScreen(_ ad: AdropInterstitialAd) {
        DispatchQueue.main.async {
            self.isAdShowing = false
            self.isAdReady = false
        }
        // 次の広告を事前読み込み
        loadAd()
    }
}

// View
struct ContentView: View {
    @StateObject private var adViewModel = InterstitialAdViewModel()

    var body: some View {
        VStack {
            Text("インタースティシャル広告サンプル")
                .font(.title)

            Button("インタースティシャル広告を表示") {
                adViewModel.showAd()
            }
            .disabled(!adViewModel.isAdReady)
            .padding()
        }
    }
}

デリゲートメソッド

必須メソッド

onAdReceived
(AdropInterstitialAd) -> Void
広告受信成功時に呼び出されます。この時点でshow()を呼び出して広告を表示できます。
onAdFailedToReceive
(AdropInterstitialAd, AdropErrorCode) -> Void
広告受信失敗時に呼び出されます。エラーコードを通じて失敗原因を確認できます。

オプションメソッド

onAdImpression
(AdropInterstitialAd) -> Void
広告インプレッションが記録されたときに呼び出されます。
onAdClicked
(AdropInterstitialAd) -> Void
ユーザーが広告をクリックしたときに呼び出されます。
onAdWillPresentFullScreen
(AdropInterstitialAd) -> Void
インタースティシャル広告が表示される直前に呼び出されます。アニメーションの一時停止などの作業を実行できます。
onAdDidPresentFullScreen
(AdropInterstitialAd) -> Void
インタースティシャル広告が画面に表示された直後に呼び出されます。
onAdWillDismissFullScreen
(AdropInterstitialAd) -> Void
インタースティシャル広告が閉じる直前に呼び出されます。
onAdDidDismissFullScreen
(AdropInterstitialAd) -> Void
インタースティシャル広告が閉じた直後に呼び出されます。次の広告を事前読み込みするのに適したタイミングです。
onAdFailedToShowFullScreen
(AdropInterstitialAd, AdropErrorCode) -> Void
広告表示失敗時に呼び出されます。エラーコードを通じて失敗原因を確認できます。

ベストプラクティス

1. 広告の事前読み込み

広告を表示する前に事前に読み込んでユーザー体験を向上させてください。
class GameViewController: UIViewController {
    private var interstitialAd: AdropInterstitialAd?
    private var isAdReady = false

    override func viewDidLoad() {
        super.viewDidLoad()
        // 画面進入時に事前読み込み
        preloadInterstitialAd()
    }

    private func preloadInterstitialAd() {
        interstitialAd = AdropInterstitialAd(unitId: "YOUR_UNIT_ID")
        interstitialAd?.delegate = self
        interstitialAd?.load()
    }

    func onGameLevelComplete() {
        // レベル完了時にすぐに表示
        if isAdReady {
            interstitialAd?.show(fromRootViewController: self)
        }
    }
}

extension GameViewController: AdropInterstitialAdDelegate {
    func onAdReceived(_ ad: AdropInterstitialAd) {
        isAdReady = true
    }

    func onAdDidDismissFullScreen(_ ad: AdropInterstitialAd) {
        isAdReady = false
        // 次の広告を事前読み込み
        preloadInterstitialAd()
    }
}

2. 適切な表示タイミング

アプリの自然な遷移ポイントで広告を表示してください。
// ✅ 良い例: ゲームレベルの移行
func onLevelComplete() {
    saveProgress()
    showInterstitialAd()
    loadNextLevel()
}

// ✅ 良い例: コンテンツ閲覧完了
func onArticleFinished() {
    showInterstitialAd()
}

// ❌ 悪い例: ユーザーアクション中
func onButtonTap() {
    showInterstitialAd() // ユーザー体験の阻害
    performAction()
}

3. 閉じた後の再読み込み

広告が閉じた後、次の広告を事前読み込みしてください。
func onAdDidDismissFullScreen(_ ad: AdropInterstitialAd) {
    // すぐに次の広告を読み込み
    loadInterstitialAd()
}

4. エラー処理

広告読み込み失敗に備えた処理を実装してください。
func onAdFailedToReceive(_ ad: AdropInterstitialAd, _ errorCode: AdropErrorCode) {
    switch errorCode {
    case .networkError:
        print("ネットワークエラー: 後で再試行")
        retryAfterDelay()
    case .noFill:
        print("表示する広告がありません")
        continueWithoutAd()
    default:
        print("広告読み込み失敗: \(errorCode)")
    }
}

private func retryAfterDelay() {
    DispatchQueue.main.asyncAfter(deadline: .now() + 30) {
        self.loadInterstitialAd()
    }
}

次のステップ