[Swift5]Admob動画広告NewAPIのサンプルコード

Admob動画広告(リワード広告も呼ぶ)を2018年から使って以来古いAPIを使っていたのですが、ずっと「非推奨(Deprecated)」と表示され続けていており、NewAPIへ移行しました。
サンプルコードが載っているサイトもあるのですが、従来APIばかりだったので、すぐ使えるサンプルコードも貼っております。
Admobの公式ガイドを参考に少しだけカスタマイズしております。

初期設定_ターミナル操作等

ターミナルを開いていつものコマンドです。
大体私は指定ディレクトリへジャンプする際は、finderのフォルダを大体ドラック&ドロップです。

cd [指定ディレクトリへ]

その後ターミナル上で以下コマンドを入力しpodfileをまず作成

pod init

そして作成したpodfileに以下黄色ハイライトの通り「pod ‘Firebase/AdMob’」を入力

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'admobTest_200911' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  pod 'Firebase/AdMob'

  # Pods for admobTest_200911

end

そしてpodfileをターミナルに以下を入力しプロジェクトにインストール

pod install

最初に開く拡張子「.xcodeproj」ではなく「.xcworkspace」ファイルができるので、それをを開いて準備完了

Xcodeの処理

サンプルコード全文

import UIKit
import GoogleMobileAds

class ViewController: UIViewController,GADRewardedAdDelegate {
        
    var rewardedAd: GADRewardedAd?
    var adRequestInProgress = false
    var testUnitId = "ca-app-pub-3940256099942544/1712485313"
    
    override func viewDidLoad() {
        super.viewDidLoad()
        rewardedAd = createAndLoadRewardedAd()
    }
    
    func createAndLoadRewardedAd()  -> GADRewardedAd{
        
        rewardedAd = GADRewardedAd(adUnitID: testUnitId)
        rewardedAd?.load(GADRequest()) { error in
            if let error = error {
                print("広告の読み出し失敗: \(error)")
            } else {
                print("広告の読み出し設定完了")
            }
        }
        return rewardedAd!
    }

    func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
        print("再生終了。達成おめでとう")
        print("Reward received with currency: \(reward.type), amount \(reward.amount).")
    }
    
    func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) {
        print("動画広告表示中")
    }
    
    // 前のリワード広告の表示が終了したらすぐに次のリワード広告の読み込みを開始できるようにする
    func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
        print("動画広告終了")        
        adRequestInProgress = false
        var rewardedAd = createAndLoadRewardedAd()        
    }
    func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) {
        print("動画広告表示失敗")        
        adRequestInProgress = false
    }    

    @IBAction func testButtonTapped(_ sender: Any) {        
        if rewardedAd!.isReady == true {
            rewardedAd!.present(fromRootViewController: self, delegate: self)
        }
    }
}

サンプルコードの前提

stroyboardにUIButtonを配置し、それを「testButtonTapped」とAction接続をしてます。

デバッグエリアに「広告の読み出し設定完了」と表示された後にUIButtonをタップするとテスト広告が表示されます。
あとはデバッグエリアを見れば、どこでユーザーに報酬をあげる処理を入れるべきかなどが判断できると思います。


お知らせ

ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。
RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!