久しぶりに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().isReady
がtrue
になります。
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) { //エラー発生時(動画の準備に失敗した場合など) }