首页 > 解决方案 > 如何将 UIViewController 添加到 Admob 的 Swift UI 视图中

问题描述

抱歉,我对 iOS 开发不是很熟悉,但我会尽力学习。

我正在 iOS 上测试 Admob 中介,并希望将横幅加载到我创建的 swift UI 中,同时能够查看横幅的回调。

SwiftUI 代码:

import SwiftUI

struct ContentView: View {


    var body: some View {
        ZStack {
            Color.init(hue: 0.2722, saturation: 0.89, brightness: 0.29, opacity: 1.0)        .edgesIgnoringSafeArea(.all)
            VStack(alignment: .center, spacing: 8) {
                HStack(alignment: .firstTextBaseline, spacing: 8) {
                    Button(action: {}){  
                      //load banner here            
                    }, label: {
                      HStack {
                          Text("Show Banner")
                      }
                    }
                }
              
            }
          }
      }
  }
}

Admob 横幅代码:

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADBannerViewDelegate {

  /// The banner view.
  @IBOutlet weak var bannerView: GADBannerView!

  override func viewDidLoad() {
    super.viewDidLoad()
    print("Google Mobile Ads SDK version: \(GADMobileAds.sharedInstance().sdkVersion)")
    bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
    bannerView.rootViewController = self
    bannerView.load(GADRequest())
    bannerView.delegate = self
}

func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
  print("bannerViewDidReceiveAd")
}

func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
  print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}

func bannerViewDidRecordImpression(_ bannerView: GADBannerView) {
  print("bannerViewDidRecordImpression")
}

func bannerViewWillPresentScreen(_ bannerView: GADBannerView) {
  print("bannerViewWillPresentScreen")
}

func bannerViewWillDismissScreen(_ bannerView: GADBannerView) {
  print("bannerViewWillDIsmissScreen")
}

func bannerViewDidDismissScreen(_ bannerView: GADBannerView) {
  print("bannerViewDidDismissScreen")
}

}

我熟悉 Android,我在这里要做的只是有一个 onClick 按钮并在该按钮内实例化一个单独的类。

我坚持的是当我单击“显示横幅”按钮时如何在同一视图中加载横幅。如果有人可以指导我需要做什么,那就太好了。

编辑:

我已经检查了下面提到的教程并做到了这一点:

结构 ViewControllerWrapper: UIViewControllerRepresentable {

    func makeCoordinator() -> Coordinator {
        return Coordinator(self)
    }
   
    public typealias UIViewControllerType = UIViewController

    func makeUIViewController(context: UIViewControllerRepresentableContext<ViewControllerWrapper>) -> ViewControllerWrapper.UIViewControllerType {
        return UIViewController()
    }

    func updateUIViewController(_ uiViewController: ViewControllerWrapper.UIViewControllerType, context: UIViewControllerRepresentableContext<ViewControllerWrapper>) {
        //
    }
}
    

扩展 ViewControllerWrapper { 类协调器:NSObject,GADBannerViewDelegate { var parent:ViewControllerWrapper

        init(_ parent: ViewControllerWrapper) {
            self.parent = parent
        }

func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
  print("bannerViewDidReceiveAd")
}

func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
  print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}

func bannerViewDidRecordImpression(_ bannerView: GADBannerView) {
  print("bannerViewDidRecordImpression")
}

func bannerViewWillPresentScreen(_ bannerView: GADBannerView) {
  print("bannerViewWillPresentScreen")
}

func bannerViewWillDismissScreen(_ bannerView: GADBannerView) {
  print("bannerViewWillDIsmissScreen")
}

func bannerViewDidDismissScreen(_ bannerView: GADBannerView) {
  print("bannerViewDidDismissScreen")
}
       
    }
}

我会调用ViewControllerWrapper()里面的按钮。但是我在哪里添加这个代码来加载横幅:

  bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
  bannerView.rootViewController = self
  bannerView.load(GADRequest())

标签: iosswiftuiviewcontrolleradmobads

解决方案


推荐阅读