ios - 如何将 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())
解决方案
推荐阅读
- javascript - 在 React Native 中将卡片标题与图像垂直对齐
- powershell - 使用 Powershell 删除多个 csv 文件中的空行
- php - PHP将数组的值更改为字符
- visual-studio-code - VS Code 在一个 WSL 中有效,但在其他 WSL 中无效
- r - 如何使用 highcharter 库进行双轴操作?
- django - 如何在 django-graphql-jwt 中集成 Facebook 登录?
- asp.net - 在 https://login.microsoftonline.com 访问 XMLHttpRequest 已被 CORS 策略阻止
- apache-spark - 当我在 pyspark 中进行缓存时,数据连接是否需要重新分区
- asp.net-mvc - 在应用启动时从 IHostedService 异步更新 autofac 容器
- xcode - XCode Build 失败并出现 rsync 错误:“rsync 错误:收到 SIGINT、SIGTERM 或 SIGHUP”