質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

330閲覧

xcodeでadmobのリワード動画を実装したいです

meia

総合スコア26

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2017/07/14 13:00

###前提・実現したいこと

swift3
xcode8.3.3
を使っています。

自作アプリにadmobのリワード動画を実装しようと思い、勉強しているところです。

AdMob for iOS

このサイトを参考にまずはテスト広告を実装したいのですが、うまく行かなくて困っております。

###発生している問題・エラーメッセージ

(lldb)

イメージ説明

###該当のソースコード

swift3

1 2//AppDelegate.swift 3 4class AppDelegate: UIResponder, UIApplicationDelegate { 5 6 var window: UIWindow? 7 8 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 9 // Override point for customization after application launch. 10 FirebaseApp.configure() 11 12 // Initialize Google Mobile Ads SDK 13 GADMobileAds.configure(withApplicationID: "ca-app-pub-3940256099942544/1712485313") 14 15 return true 16 } 17 18//ViewController.swift 19class ViewController: UIViewController,GKGameCenterControllerDelegate, GADRewardBasedVideoAdDelegate{ 20 21 var delegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate 22 23 /// Is an ad being loaded. 24 var adRequestInProgress = false 25 26 /// The reward-based video ad. 27 var rewardBasedVideo: GADRewardBasedVideoAd? 28 29 override func viewDidLoad() { 30 super.viewDidLoad() 31 32// GADRewardBasedVideoAdDelegate notifies you of rewarded video lifecycle events. 33 rewardBasedVideo = GADRewardBasedVideoAd.sharedInstance() 34 rewardBasedVideo?.delegate = self 35 36 } 37 38 39 override func viewWillAppear(_ animated: Bool) { 40 41 if !adRequestInProgress && rewardBasedVideo?.isReady == false { 42 43 let request = GADRequest() 44 request.testDevices = [ kGADSimulatorID] 45 rewardBasedVideo?.load(request, 46 withAdUnitID: "ca-app-pub-3940256099942544/1712485313") 47 adRequestInProgress = true 48 } 49 50 } 51 52 override func viewDidAppear(_ animated: Bool) { 53 54 if GADRewardBasedVideoAd.sharedInstance().isReady == true { 55 GADRewardBasedVideoAd.sharedInstance().present(fromRootViewController: self) 56 }else{ 57 print("まだ準備できてないよ") 58 } 59 }

###試したこと

この状態でシュミレーターを起動すると、画像のようなエラーが出て、動画広告を出せませんでした。

if !adRequestInProgress && rewardBasedVideo?.isReady == false {

let request = GADRequest() request.testDevices = [ kGADSimulatorID] rewardBasedVideo?.load(request, withAdUnitID: "ca-app-pub-3940256099942544/1712485313") adRequestInProgress = true }

このあたりを消すとエラー自体は出なくなるので、原因はここだと思うのですが、詳細がわかりません。

ちなみにAppDelegate.swiftのコードは、上記のサイトの下の方にあるリンクからダウンロードしたサンプルを参考にしました。

もしどなたか原因や修正方法がわかる方がいたら、教えていただきたいです。
足りない情報は追加させていただきますので、指摘をしていただければと思います。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

GADRewardBasedVideoAd.sharedInstance().present(fromRootViewController: self)

のタイミングが早すぎるようです

GADRewardBasedVideoAdDelegateで利用できるLogをセットしてステータスを確認しましょう

例えば、以下のrewardBasedVideoAdDidReceiveにて
ロードが完了したのを確認する必要があるでしょう
あるいは十分な余裕を取らないといけないでしょうね

func rewardBasedVideoAdDidReceive(_ rewardBasedVideoAd: GADRewardBasedVideoAd) { print("Reward based video ad is received.") }

またロードが終わってからpresent()を実行しないとAdMobは表示されません

それから、エラーから推測ですが
Firebaseの設定は終わっていますか?
https://firebase.google.com/docs/admob/ios/quick-start?hl=ja

Firebaseが初めてであれば
GameCenterを外した簡単なAdMobのBannerのアプリでテストしてから
Rewarded Video Adに入った方がいいですね

投稿2017/07/15 06:19

編集2017/07/15 06:44
aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meia

2017/07/15 12:21

回答ありがとうございます! そういった確認もできたんですね・・・勉強になります! FireBaseは最新版を導入していて、この広告IDはTestAdsが出るものなので、確かに本番用ではないですね・・・ おっしゃる通り、Exampleとか簡単な例からテストしてみようと思います。 ちなみになんですが、今回はpresentする段階までは至っていなくて、presentをIBActionとかに入れて時間をおいても、loadしている途中にエラーが出現しているようなのですが、どうなのでしょうか・・・
aja

2017/07/15 23:29

>この広告IDはTestAdsが出るものなので、確かに本番用ではないですね >loadしている途中にエラーが出現しているようなのですが AppDelegateのapplicationIDが間違っているのが原因でしょう /ではなく〜の番号になるはずです 参考: https://i-app-tec.com/ios/rewarded-video-ads.html
meia

2017/07/16 10:07

なるほど、そういうことだったんですね! Admobの方で設定を済ませてから、withApplicationIDを変えて実機で初めて試したところ、エラーが出ませんでした。(シュミレーターは相変わらずですが・・・) ありがとうございました!
aja

2017/07/16 22:56

>シュミレーターは相変わらずですが テスト用のAdUnitIDとApplicationIDは /ではなく〜の違いもありますが、そもそもナンバーも違います
meia

2017/07/18 13:44

あっ、説明不足です、すいません!! Admob側で設定した後に、コードのAdUnitIDとApplicationIDは、Admobで発行されたものにそれぞれ変更しています。 お手数おかけして、申し訳ありませんでした。
guest

0

参考にしているサイトでは下記のような記述になっていますが、このようにした場合はうまくいきますか?

swift

1GADRewardBasedVideoAd.sharedInstance().load(GADRequest(), 2 withAdUnitID: "ca-app-pub-3940256099942544/1712485313")

また Github - RewardedVideoExample は試されましたか?
自分の環境では、 clone して動作することが確認できました。

投稿2017/07/15 01:58

ykws

総合スコア1236

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meia

2017/07/15 12:14

回答ありがとうございます!上記のコードはRewardedVideoExample の方をコピーしたものなのですが、サイトの説明と違っていますよね・・・まずはExampleで動作するか、とサイトの方のコードに変えるのも試してみようと思います!
meia

2017/07/15 13:54

ひとまずRewardedVideoExampleでは、シュミレーターで動画広告を見ることができました!
ykws

2017/07/15 13:58

Good!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問