第0部: スタートガイド
第1部: リワード広告 ← イマココ
第2部: インタースティシャル広告
第3部: ネイティブ広告
第4部: バナー広告
第5部: アプリ起動広告
はじめに
多くのドキュメントはUIKitで書かれていてSwiftUIで書かれていることはほとんどありません。
ドキュメントを見て毎回書き直すのは苦痛です。楽しくありません。
今回のお題であるAdMobのリワード広告ドキュメントもUIKitで書かれています。
今後、同じ事をするであろう方のために書き直したものを公開しておきます。
実装準備
実装の前にスタートガイドに記載してある事を行います
①: Mobile Ads SDK のインポート
②: Info.plist の更新
③: Mobile Ads SDK の初期化
こちらで詳しく解説してあります。
これが終われば準備は完了です。
実装
Reward.swift
import GoogleMobileAds
class Reward: NSObject, GADFullScreenContentDelegate, ObservableObject {
@Published var rewardLoaded: Bool = false
var rewardedAd: GADRewardedAd?
override init() {
super.init()
}
// リワード広告の読み込み
func LoadReward() {
GADRewardedAd.load(withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest()) { (ad, error) in
if let _ = error {
print("😭: 読み込みに失敗しました")
self.rewardLoaded = false
return
}
print("😍: 読み込みに成功しました")
self.rewardLoaded = true
self.rewardedAd = ad
self.rewardedAd?.fullScreenContentDelegate = self
}
}
// リワード広告の表示
func ShowReward() {
let root = UIApplication.shared.windows.first?.rootViewController
if let ad = rewardedAd {
ad.present(fromRootViewController: root!, userDidEarnRewardHandler: {
print("😍: 報酬を獲得しました")
self.rewardLoaded = false
})
} else {
print("😭: 広告の準備ができていませんでした")
self.rewardLoaded = false
self.LoadReward()
}
}
}
ContentView.swift
import SwiftUI
struct ContentView: View {
@ObservedObject var reward = Reward()
var body: some View {
Button(action: {
reward.ShowReward()
}) {
Text(reward.rewardLoaded ? "リワード広告表示" : "読み込み中...")
}
.onAppear() {
reward.LoadReward()
}
.disabled(!reward.rewardLoaded)
}
}
おわり
今回作成したプロジェクトを置いとくので参考にしてください。