Контроллер вкладок также закрывается, когда GADRewardBasedVideoAd в AdMob отклоняет - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть ViewController с GADRewardBasedVideoAd.

. Я могу легко проигрывать и закрывать рекламу, но с закрытием рекламы также ViewController.

Что я могу сделать?

    @IBAction func ad_button_click(_ sender: Any) {
            if GADRewardBasedVideoAd.sharedInstance().isReady == true     
            { 
GADRewardBasedVideoAd.sharedInstance().present(fromRootViewController: self)
            }
        }

1 Ответ

0 голосов
/ 08 декабря 2018

Для тех из вас, кто сталкивается с той же проблемой:

Вы можете создать новый класс для вашего rootViewController (TabBarController или NavigationController и т. Д.) И реализовать там что-то вроде этого:

override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
    dismissalCounter += 1
    if (dismissalCounter < 2) {
       super.dismiss(animated: flag, completion: completion)
    }
}

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    dismissalCounter = 0
}

override func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) {
    dismissalCounter = 0
    super.present(viewControllerToPresent, animated: flag, completion: completion)
}

var dismissalCounter : Int = 0

Внимание!Используйте эти функции внутри TabBarController или NavigationController, иначе это не сработает

UPD: К сожалению, в моем случае все NavigationControllers внутри TabBarController нарушаются (заголовки непокажите, а внутри них нет кнопок), если я нарисую действия по исправлению, я сообщу вам

UPD2: Довольно очевидным решением будет изменение initialViewController и просмотрдобавьте от этого, это не будет отклонено

UPD3: Я решил это очень и очень странно:

class ViewController : UIViewController {  
override func viewWillAppear(_ animated: Bool) {
        if GADRewardBasedVideoAd.sharedInstance().isReady == false {
             let request = GADRequest()
            rewardBasedVideo!.load(request, withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
        }
    }

    var rewardBasedVideo: GADRewardBasedVideoAd?

    @IBAction func ad_button_click(_ sender: Any) {
        if rewardBasedVideo!.isReady == true     {
            let bl = blur()
            self.present(bl, animated: true, completion: {
                self.rewardBasedVideo?.present(fromRootViewController: bl)
            })

        }
    }

}

class blur : UIViewController {
    override func viewDidLoad() {
        checkForKeyWindow()
    }

    func checkForKeyWindow() {
        DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: {
            if (UIApplication.topViewController() == self) {
                print("dismissed and forgotten")
                self.dismiss(animated: true, completion: nil)
            } else {
                print("not keywindow")
                self.checkForKeyWindow()
            }
        })
    }

    @objc func close() {
       self.dismiss(animated: true, completion: nil)
    }
}

extension UIApplication {
    class func topViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {

        if let nav = base as? UINavigationController {
            return topViewController(base: nav.visibleViewController)
        }

        if let tab = base as? UITabBarController {
            let moreNavigationController = tab.moreNavigationController

            if let top = moreNavigationController.topViewController, top.view.window != nil {
                return topViewController(base: top)
            } else if let selected = tab.selectedViewController {
                return topViewController(base: selected)
            }
        }

        if let presented = base?.presentedViewController {
            return topViewController(base: presented)
        }

        return base
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...