酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

iOSでGoogle AdMobの動画リワード広告を表示する

久しぶりにAdMobを試しています。たまにゲームなどで動画広告を見ると報酬が貰える実装がありますよね。動画リワード広告と呼ぶらしいです。

Google AdMobの動画リワード広告を表示する

import UIKit
import GoogleMobileAds

class TableViewController: UITableViewController, GADRewardBasedVideoAdDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        GADRewardBasedVideoAd.sharedInstance().delegate = self
    }

動画リワード広告の表示は任意のタイミングで実施することができます。ここではセルがタップされた時に実行するようにしてみました。

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        
        switch (indexPath.section, indexPath.row):
        case (0, 1):
            showRewardVideo()
        default:
            break
        }
    }

広告ユニットIDca-app-pub-3940256099942544/1712485313はAdMobが用意しているテストに利用できるものです。リワード広告動画はload()によって動画のダウンロード(ストリーミング)が開始されて、十分な再生バッファが整った時点でGADRewardBasedVideoAd.sharedInstance().isReadytrueになります。

fileprivate func showRewardVideo() {
    let request = GADRequest()
    request.testDevices = [ kGADSimulatorID ]
    GADRewardBasedVideoAd.sharedInstance().load(request, withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
}

この時点ではまだ再生が開始されていません。再生開始が可能になると、rewardBasedVideoAdDidReceive(_:)が呼ばれます。動画プレイヤーを開いて動画の再生を開始します。

広告を全て見終わったあとにrewardBasedVideoAd(_:didRewardUserWith:)が呼ばれるので、この時点で特典を与える処理をおこないます。

動画プレイヤーを開いた時点でゲームの進行を止める必要がある場合などは、rewardBasedVideoAdDidOpen(_:)rewardBasedVideoAdDidClose(_:)を使って制御する必要があるのではないかと思います。

// MARK: - GADRewardBasedVideoAdDelegate

func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,
                        didRewardUserWith reward: GADAdReward) {
    //リワード獲得
}

func rewardBasedVideoAdDidReceive(_ rewardBasedVideoAd:GADRewardBasedVideoAd) {
    //動画再生の準備完了
    
    if GADRewardBasedVideoAd.sharedInstance().isReady {
        GADRewardBasedVideoAd.sharedInstance().present(fromRootViewController: self)
    }
}

func rewardBasedVideoAdDidOpen(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    //動画プレイヤーが開かれた
}

func rewardBasedVideoAdDidStartPlaying(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    //動画再生開始
}

func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    //動画プレイヤーを閉じた
}

func rewardBasedVideoAdWillLeaveApplication(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
    //呼ばれない?
}

func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,
                        didFailToLoadWithError error: Error) {
    //エラー発生時(動画の準備に失敗した場合など)
}