SwiftUI: промежуточная реклама Admob не представлена ​​на rootViewController - PullRequest
0 голосов
/ 10 апреля 2020

CODED IN SWIFTUI

Я реализовал страницу настроек в моем приложении SwiftUI, которая отображается после нажатия кнопки в представлении. Этот вид обернут в лист. Вы можете увидеть код ниже:

TabsBar(showOptionsTab: $showOptionsTab)
    .sheet(isPresented: $showOptionsTab)
    {
        OptionsTab(showOptionsTab: self.$showOptionsTab)
    }

Я реализовал вставку в этой "вкладке параметров", которая создается, когда вкладка параметров загружается в вызове .onAppear (), и отображается при нажатии кнопки "Назад". , Вы можете код из вкладки Options ниже:

@State private var interstitial : GADInterstitial!

VStack
{
    ... other code

    Button(action:
    {
        if ( self.interstitial.isReady)
        { 
            let root = UIApplication.shared.windows.first?.rootViewController
            self.interstitial.present(fromRootViewController: root!)               
        }

        self.showOptionsTab.toggle()
    })
    {
        Image(systemName: "xmark")
            .font(.largeTitle)
    }
}
.onAppear
{
    self.interstitial = GADInterstitial(adUnitID: "addID")
    let req = GADRequest()
    self.interstitial.load(req) 
}

У меня есть дополнительный код в кнопке, который регистрирует статус промежуточного сообщения, и он показывает, что он ГОТОВ, и текущий код находится под ударом. ... но он никогда не представляет себя.

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

Является ли rootViewController неправильным представлением для загрузки вставки в представлении, представленном с листа? Иначе, что еще я делаю не так?

Спасибо за помощь заранее!

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Попробуйте это

TabsBar(showOptionsTab: $showOptionsTab)
    .sheet(isPresented: $showOptionsTab)
    {
        OptionsTab(showOptionsTab: self.$showOptionsTab)
            .OnDisapear 
            {    
                if ( self.interstitial.isReady)
                { 
                    let root = UIApplication.shared.windows.first?.rootViewController
                    self.interstitial.present(fromRootViewController: root!)               
                }
            } 
        }
    }

И затем добавьте промежуточную переменную состояния в этом представлении, и при появлении в ContextView создайте вставку там.

0 голосов
/ 01 мая 2020

похоже, что есть что-то, что мешает показу промежуточной рекламы, когда представление листа уже представлено

, в моем случае я хотел представить объявление сразу после просмотра листа представил, который не работал

, что сработало, Представив объявление, и после его отклонения, представление листа будет представлено , и оно сработало!

для Interstitial я использовал этот код

import SwiftUI
import GoogleMobileAds
import UIKit

final class Interstitial:NSObject, GADInterstitialDelegate{
  var interstitialID = "ca-app-pub-3940256099942544/4411468910"
  var interstitial:GADInterstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
  var sheet: (() -> Void)? = nil  //this closure will be executed after dismissing the ad

  override init() {
    super.init()
    LoadInterstitial()
  }

  func LoadInterstitial(){
    let req = GADRequest()
    self.interstitial.load(req)
    self.interstitial.delegate = self
  }

  func showAd(then sheet:(() -> Void)?){
    if self.interstitial.isReady{
      let root = UIApplication.shared.windows.first?.rootViewController
      self.interstitial.present(fromRootViewController: root!)
      self.sheet = sheet
    }
    else{
      print("Not Ready")
    }
  }

  func interstitialDidDismissScreen(_ ad: GADInterstitial) {
    self.interstitial = GADInterstitial(adUnitID: interstitialID)
    LoadInterstitial()
    if let presentSheet = sheet {
      presentSheet()
    }
  }
}

здесь мы передаем все, что хотим, чтобы замыкание было вызвано, когда interstitialDidDismissScreen вызывается

сейчас вместо переключения состояния, когда Нажмите кнопку, она будет переключена после того, как объявление будет удалено

в верхней части вашего содержимого. 1025 * Примечание: я использовал код промежуточной рекламы из этого gist

Кроме того, AFAIK мы не можем сказать, является ли это ошибкой в ​​swiftUI, или это то, что googleAdmob должен был позаботиться о, нет Поддержка SwiftUI От Google, поэтому мы не можем винить их.

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