前提・実現したいこと
swiftUIでAdmobリワード広告v8を実装したい
該当のソースコード
一応、広告の表示には成功しますが
高確率で「広告の準備ができていませんでした」と表示されます
swift
1import Foundation 2import GoogleMobileAds 3import AVFoundation 4 5class RewardedAdDelegate: NSObject, GADFullScreenContentDelegate, ObservableObject { 6 static var instance = RewardedAdDelegate() 7 var rewardedAd: GADRewardedAd? 8 9 override init() { 10 super.init() 11 let request = GADRequest() 12 // テストIDを使ってます 13 GADRewardedAd.load(withAdUnitID: "ca-app-pub-8123415297019784/4985798738", 14 request: request, completionHandler: { (ad, error) in 15 if let error = error { 16 return 17 } 18 19 self.rewardedAd = ad 20 self.rewardedAd?.fullScreenContentDelegate = self 21 } 22 ) 23 } 24 25 // 広告を表示して報酬を獲得する 26 func showRewardedAd() { 27 let root = UIApplication.shared.windows.first?.rootViewController 28 if let ad = rewardedAd { 29 ad.present(fromRootViewController: root!, 30 userDidEarnRewardHandler: { 31 print("報酬を獲得しました。") 32 } 33 ) 34 } else { 35 print("広告の準備ができていませんでした") 36 } 37 } 38 39 //広告が表示されたタイミング 40 func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) { 41 print("広告を表示しました") 42 } 43 44 //報酬獲得が失敗したタイミング 45 func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { 46 // 動画の視聴を途中で止めるなどで報酬を獲得できなかった時に、インスタンスを作り直す 47 // インスタンスは使い捨てなので、作り直さないと再視聴できない 48 RewardedAdDelegate.instance = RewardedAdDelegate() 49 } 50 51 //既に報酬を獲得している場合 52 func ad(_ ad: GADFullScreenPresentingAd, 53 didFailToPresentFullScreenContentWithError error: Error) { 54 print("Rewarded ad failed to present with error: (error.localizedDescription).") 55 } 56}
swiftUI
1struct Ad: View { 2 var body: some View { 3 Button(action: { 4 let reward = RewardedAdDelegate.instance 5 reward.showRewardedAd() 6 }) { 7 Text("広告表示") 8 } 9 } 10}
試したこと
https://amusia-web.com/blog/swift_admob_reward_v8/
ソースコードはこちらを参考にしてちょっと変えました
何が原因なのか知識不足でわからないので助けてくれたら嬉しいです
あなたの回答
tips
プレビュー