Можно ли представить UIViewController для определенного элемента в иерархии представленных экранов для соответствия политике Google Admob? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть несколько внештатных проектов, которые используют Google Admob. Теперь менеджер проекта сказал мне, что проекты не соответствуют политике Google Admob, по-видимому, Google временно прекратил показывать рекламу для определенного проекта.

Вот идеальный поток, который хочет Google Admob (ref: https://support.google.com/admob/answer/6201362?hl=en&ref_topic=2745287):

enter image description here

Насколько я знаю, такого рода реализация в iOS невозможна. То, что в настоящее время делают проекты, - это после закрытия промежуточной рекламы (с помощью функции делегата в Admob Framework, interstitialDidDismissScreen или interstitialWillDismissScreen), только тогда будет показан следующий экран. Короче говоря, после отклонения модально представленной промежуточной рекламы, следующий экран, как ожидается, будет уже и прекрасно представлен!

У меня было несколько попыток сделать это, только чтобы привести к этому, конечно, как мы все знаем:

Предупреждение. Попытайтесь указать, чей вид не находится в иерархии окон!

Итак, мой вопрос: есть ли способ представить экран в задней части представленного экрана?

Я пробовал другие способы, такие как удаление анимации, но предыдущий экран все еще можно увидеть. Простой проект для тех, кто хочет что-то попробовать:

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let vc1 = ViewController()
    let vc1navcon = UINavigationController(rootViewController: vc1)
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = vc1navcon
    self.window?.makeKeyAndVisible()

    return true
}

MultipleVCs.swift

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = .red

        let barButton = UIBarButtonItem(title: "VC3", style: .plain, target: self, action: #selector(self.presentVc3))
        self.navigationItem.leftBarButtonItem = barButton

    }

    @objc func presentVc3() {
        let vc3navcon = UINavigationController(rootViewController: ViewController3())
        self.present(vc3navcon, animated: true, completion: nil)
    }
}

class ViewController2: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = .green

    }
}

class ViewController3: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = .blue

        let barButton = UIBarButtonItem(title: "AddVC2", style: .plain, target: self, action: #selector(self.addVc2))
        self.navigationItem.leftBarButtonItem = barButton

        let barButton2 = UIBarButtonItem(title: "dismiss", style: .plain, target: self, action: #selector(self.dismissVc3))
        self.navigationItem.rightBarButtonItem = barButton2
    }

    @objc func dismissVc3() {
        self.dismiss(animated: true, completion: {

        })
    }

    @objc func addVc2() {
        let vc2 = ViewController2()
        let vc2navcon = UINavigationController(rootViewController: vc2)

        var viewControllers = UIApplication.shared.keyWindow?.rootViewController?.childViewControllers
        viewControllers?.append(vc2navcon)

    }
}

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Я думаю, вы можете добавить контроллер представления Admob в качестве дочернего контроллера представления второго контроллера представления. После нажатия на второй контроллер представления покажите добавленный дочерний контроллер представления.

https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html

0 голосов
/ 14 мая 2018

В идеале, эти экраны в UINavigationController.Следовательно, с ViewController1, present экран рекламы (скорее всего из корня, чтобы предотвратить его показ на контроллере отдельного представления).После того, как объявление будет показано, от push до ViewController2 с ViewController1 с отключенной анимацией (вы не увидите этого, поскольку оно выполняется за представленным контроллером представления).И затем, когда реклама отклоняется, второй контроллер представления будет виден, и пользователь сможет перейти назад, как если бы объявление никогда не отображалось.

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