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)
}
みづらくてすません
少しでも役に立ったら幸い