【发布时间】:2021-09-11 01:31:10
【问题描述】:
我正在努力在我的应用中实施插页式广告,但对 Admob 提供的文档和新的 SwiftUI 应用结构感到有些困惑。
这是 app.swift 文件,显示我已实现 GoogleMobileAds 并在 didFinishLaunchingWithOptions 方法中启动它。
import SwiftUI
import GoogleMobileAds
@main
struct adamsCalcApp: App {
var calculator = Calculator()
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView().environmentObject(calculator)
}
}
}
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
// Setup google admob instance
GADMobileAds.sharedInstance().start(completionHandler: nil)
return true
}
}
在我的 ContentView.swift 文件中,我创建了间隙变量,如...
@State var interstitial: GADInterstitialAd?
然后在视图的主堆栈上,我调用 onAppear(perform: ) 来加载广告,但是我一直收到此错误。
.onAppear(perform: {
let request = GADRequest()
GADInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/4411468910",
request: request,
completionHandler: { [self] ad, error in
if let error = error {
return
}
interstitial = ad
interstitial?.fullScreenContentDelegate = self
}
)
})
“无法将类型 'ContentView' 的值分配给类型 'GADFullScreenContentDelegate?'"
在尝试了几种不同的解决方法并尝试查找与我类似的设置后,我感觉有点不知所措,AdMob 文档仍然显示如何使用类 ViewControllers 实现,我想弄清楚如何做到这一点是 SwiftUI .
【问题讨论】:
-
你搜索过“SwiftUI interstitial”吗?有许多结果可能对您有用。
-
在浏览了 SwiftUI Interstitial 之后,我发现了对我有用的差异,我将在下面发布答案。
-
请看一下 SwiftUI 中的广告要点 - gist.github.com/dhanrajdc7/6442ff07fc27a15b4f062f70b3be2684
-
在 SwiftUI 中的 Ads 要点略有弃用,GADInterstitialDelegate 和 GADInterstitial 不再在范围内。