概要

本アプリは Banner と Rewarded の2種類の広告を活用。プレミアムユーザーは非表示。 Rewarded 視聴で1回限りプレミアム機能を一時解放できる導線あり。

広告の種類と配置

種類配置無料/プレミアム
BannerContentView 下部無料のみ
Rewarded能動視聴(プレミアム機能一時解放)常時利用可

AdMob ID 構成

// App ID
"ca-app-pub-4104853755894501~7490751129"

// Rewarded Ad Unit
#if DEBUG
"ca-app-pub-3940256099942544/1712485313"  // Google公式テストID
#else
"ca-app-pub-4104853755894501/1172971356"  // 本番ID
#endif

RewardedAdManager API

@Observable @MainActor
final class RewardedAdManager {
    var isAdReady: Bool
    private var adContinuation: CheckedContinuation<Bool, Never>?

    func loadAd()
    func showAd() async -> Bool  // true=報酬獲得
}

continuation leak 対策

Google AdMob の callback ベースAPI を CheckedContinuation でブリッジ。 重複表示・メモリリーク防止のため、callback 実行後に必ず resume + nil 化。

ビジネスルール

外部連携

連携先用途
Google AdMob SDK v12.0+Banner / Rewarded 広告
App Tracking TransparencyIDFA許可
Info.plist (NSUserTrackingUsageDescription)ATT説明文

エラー処理

発生条件対応
Banner ロード失敗サイレント(高さ0)
Rewarded ロード失敗「広告を読み込めませんでした」
視聴中断報酬なし

変更履歴

バージョン日付変更内容
1.02026-05-09初版作成