在 SwiftUI 中按函数调用时不会显示视图

问题描述

我有这个问题。我正在尝试使用 AdMob 在我的应用中展示广告。一切正常(我做了一些调试)但包含视频的视图没有显示......我不明白为什么它没有显示在我的内容顶部。

这是调用并打开带有广告的视图的类:

    import SwiftUI
import GoogleMobileAds
import UIKit
    
class Rewarded: NSObject,GADRewardedAdDelegate,ObservableObject{
    @Published var adLoaded: Bool = false
    var rewardedAd:GADRewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
    
    var rewardFunction: (() -> Void)? = nil
    
    override init() {
        super.init()
        LoadRewarded()
    }
    
    func LoadRewarded(){
        let req = GADRequest()
        self.rewardedAd.load(req) { error in
            if error != nil {
                self.adLoaded = false
                print("Ad not loaded")
            } else {
                self.adLoaded = true
                print("Ad loaded")
            }
        }
    }
    
    func showAd(rewardFunction: @escaping () -> Void){
        if self.rewardedAd.isReady {
            print("Ad is ready to show")
            self.rewardFunction = rewardFunction
            if let root = UIApplication.shared.windows.first?.rootViewController {
                self.rewardedAd.present(fromRootViewController: root,delegate: self)
                print("Presenting")
            } else {
                print("Failed to open ad")
            }
        } else {
           print("Ad not ready to show")
       }
    }
    
    func rewardedAd(_ rewardedAd: GADRewardedAd,userDidEarn reward: GADAdReward) {
        if let rf = rewardFunction {
            rf()
        }
    }
    
    func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
        self.rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
        LoadRewarded()
    }
}

这是调用类函数的代码的 SwiftUI 部分:

Button {
                            self.rewardAd.showAd(rewardFunction: {
                                // GIVE REWARD HERE
                            })
                        } label: {
                            Text("Watch Ad")
                                    .foregroundColor(Color.white)
                                .font(.custom(customFont,size: 17))
                                    .fontWeight(.bold)
                        }

而且控制台也不会打印任何错误...

有人知道为什么它不显示吗?

谢谢大家

解决方法

这对我有用。我花了很长时间让它起作用,并尝试遵循我能找到的所有示例,最终实现了这一点。

    func showAd(rewardFunction: @escaping () -> Void){
        if let ad = rewardedAd {
            self.rewardFunction = rewardFunction
            if let root = UIApplication.shared.windows.first?.rootViewController {
                ad.present(fromRootViewController: root,userDidEarnRewardHandler: {
                        let reward = ad.adReward
                        // reward the user
                       })
            }
            else {
                print("Error presenting ad")
            }
            
        }
        else{
           print("Ad Not Ready")
       }
    }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...