masalibの日記

システム開発、運用と猫の写真ブログです

AdMob SDKの導入(objective-c)について 3

AdMob SDKの続きです

masalib.hatenablog.com


✅ リワード広告とは?

ユーザーが動画広告を最後まで見ると報酬(ゲーム内コインなど)を与える形式の広告です。


✅ 導入ステップ(Objective-C

① 必要なインポート

#import <GoogleMobileAds/GoogleMobileAds.h>

② プロパティの定義

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

③ 広告の読み込み

たとえば viewDidLoad や任意の場所で呼び出す:

- (void)loadRewardedAd {
    GADRequest *request = [GADRequest request];
    [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx"
                             request:request
                   completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
            NSLog(@"リワード広告の読み込み失敗: %@", error.localizedDescription);
            return;
        }
        self.rewardedAd = ad;
        self.rewardedAd.fullScreenContentDelegate = self;
        NSLog(@"リワード広告の読み込み成功");
    }];
}

④ 広告の表示と報酬処理

ユーザーが「広告を見る」などのアクションをしたタイミングで:

- (void)showRewardedAd {
    if (self.rewardedAd) {
        [self.rewardedAd presentFromRootViewController:self
                             userDidEarnRewardHandler:^{
            GADAdReward *reward = self.rewardedAd.adReward;
            NSLog(@"ユーザーに報酬を付与: %@ %lf", reward.type, reward.amount.doubleValue);
            [self giveUserReward]; // ユーザーに報酬を与える処理
        }];
    } else {
        NSLog(@"リワード広告が読み込まれていません");
        [self loadRewardedAd];
    }
}

- (void)giveUserReward {
    // 例: ポイント付与処理
    NSLog(@"ユーザーに100コイン付与しました");
}

⑤ デリゲートメソッド(任意)

#pragma mark - GADFullScreenContentDelegate

- (void)adDidDismissFullScreenContent:(id)ad {
    NSLog(@"リワード広告が閉じられました");
    [self loadRewardedAd]; // 次の広告を準備
}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
    NSLog(@"広告表示失敗: %@", error.localizedDescription);
}

- (void)adDidPresentFullScreenContent:(id)ad {
    NSLog(@"リワード広告が表示されました");
}

✅ テスト用広告ユニットID

種類 テスト広告ユニットID
リワード広告 ca-app-pub-3940256099942544/1712485313

⚠️ 注意点まとめ

項目 内容
再読み込み必須 1回表示した広告は使い回せないため、閉じられたら再読み込み
報酬処理 userDidEarnRewardHandler ブロック内で実行する
表示前チェック if (self.rewardedAd) で準備完了を確認
テスト環境 本番広告ユニットIDは必ず動作確認後に使用。開発中はテスト用IDで
ATT対応 NSUserTrackingUsageDescription を Info.plist に記述し、IDFA利用時は許可を取る