元文系大学生iOSアプリ開発ブログ

全くのプログラミング初心者の私がiOSアプリ開発でつまづいたところなどを中心に記事にして行きます。

移転しました。

約3秒後に自動的にリダイレクトします。

//https://rils-k.hatenablog.com/entry/2019/03/03/002057

admobのinstitutial広告がすべてのviewControllerで出てしまう(Timerを使用して何秒たったら広告を表示という実装をしてる場合)

前提としてadmobのインスチテューシャル広告をTimer使って表示するようにしてる、と

 

一つのViewController内でしか設定していないのに

 

ほかのViewControllerでも表示されてしまうことがある

 

これを解決するには

 

TimerをviewDidDisappearでinvalidate()させるのが良い

あと他のviewに行ってから、もう一回もどってまた広告を表示させたい場合はviewDidLoadではなくviewWillAppearを使った方が良いと思います

 

 

 

fileprivate var interstitial: GADInterstitial!

 

 

override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)//ここの一文書かないと機能しない

        self.interstitial = GADInterstitial(adUnitID: testAdMobID)

        self.interstitial.delegate = self

        self.interstitial.load(GADRequest())

 

 

override func viewDidDisappear(_ animated: Bool) {

         super.viewDidDisappear(animated)//ここの一文書かないと機能しない

        timer.invalidate()

    }

 

timerはTimerクラスのインスタンスです

 

 

このままだと広告が表示されたときにviewDidDisappearが発動してしまってタイマーが止まりっぱなしになってしまうので

広告を閉じたのを感知するfuncを追加その中にもう一度institutialの設定を整えてさらにタイマーを発動させます

 

//広告をクリックして開いた画面を閉じる直後

    func interstitialDidDismissScreen(_ ad: GADInterstitial) {

        self.interstitial = GADInterstitial(adUnitID: testAdMobID)

        self.interstitial.delegate = self

        self.interstitial.load(GADRequest())

        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.updateTimer), userInfo: nil, repeats: true)

    }

 

 

 みづらくてすません

少しでも役に立ったら幸い