Google AdMob RewardAd完成显示后如何保持布尔状态?

io

我目前正在使用SwiftUI开发应用程序。

我正在尝试使用google AdMob reward Ad

我编写了代码,以显示与本文相关的奖励广告

我尝试alert使用Bool statefromRewardedAdDelegate完全观看完奖励广告后显示一个但不起作用...

我该如何解决这个问题?


以下是代码:

AdShow.swift

import SwiftUI

struct AdShow: View {
    
    @ObservedObject var adDelegate = RewardedAdDelegate()
    
    var body: some View {
        
        RewardedAd()
            .alert(isPresented: $adDelegate.adFullyWatched){
                Alert(title: Text("reward Ad finished"),
                      message: Text("reward Ad finished"),
                      dismissButton: .default(Text("OK")))
            }
    }
}

RewardedAd.swift

import SwiftUI
import GoogleMobileAds

struct RewardedAd: View {
    
@EnvironmentObject var appState: AppState
@ObservedObject var adDelegate = RewardedAdDelegate()

    var body: some View {
        if adDelegate.adLoaded && !adDelegate.adFullyWatched {
            let root = UIApplication.shared.windows.first?.rootViewController
            self.adDelegate.rewardedAd!.present(fromRootViewController: root!, delegate: adDelegate)
        }
        
        return Text("Load ad").onTapGesture {
            self.adDelegate.loadAd()
        }
    }
}

RewardedAdDelegate

import Foundation
import GoogleMobileAds


class RewardedAdDelegate: NSObject, GADRewardedAdDelegate, ObservableObject {
    
    @Published var adLoaded: Bool = false
    @Published var adFullyWatched: Bool = false
    
    var rewardedAd: GADRewardedAd? = nil
    
    func loadAd() {
        rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
        
        rewardedAd!.load(GADRequest()) { error in
            if error != nil {
                self.adLoaded = false
            } else {
                self.adLoaded = true
            }
        }
    }
    /// Tells the delegate that the user earned a reward.
    func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
        adFullyWatched = true
        print("Reward received with currency: \(reward.type), amount \(reward.amount).")
    }
    
    /// Tells the delegate that the rewarded ad was presented.
    func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) {
        self.adLoaded = false
        print("Rewarded ad presented.")
    }
    
    /// Tells the delegate that the rewarded ad was dismissed.
    func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
        print("Rewarded ad dismissed.")
    }
    
    /// Tells the delegate that the rewarded ad failed to present.
    func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) {
        print("Rewarded ad failed to present.")
    }
}

更新

AdShow.swift

import SwiftUI

struct AdShow: View {
    
    @ObservedObject var adDelegate = RewardedAdDelegate()
    
    var body: some View {
        VStack{
            RewardedAd(adDelegate: self.adDelegate)
                
                .alert(isPresented: $adDelegate.adFullyWatched){
                    Alert(title: Text(""),
                          message: Text(""),
                          dismissButton: .default(Text("OK")))
                }
            // check adDelegate.adFullyWatched state -> after Ad finish this text shows
            if adDelegate.adFullyWatched{
                Text("Checked")
            }
        }
    }
}

RewardedAd.swift

import SwiftUI
import GoogleMobileAds

struct RewardedAd: View {
    
    @ObservedObject var adDelegate : RewardedAdDelegate

    var body: some View {
        if adDelegate.adLoaded && !adDelegate.adFullyWatched {
            let root = UIApplication.shared.windows.first?.rootViewController
            self.adDelegate.rewardedAd!.present(fromRootViewController: root!, delegate: adDelegate)
        }
      
        return Text("Load ad").onTapGesture {
            self.adDelegate.loadAd()
        }
    }
}

重新更新

AdShow.swift

import SwiftUI

struct AdShow: View {
    
    @ObservedObject var adDelegate = RewardedAdDelegate()
    @State var isAlert = false
    
    var body: some View {
        VStack{
            
            Button(action: {
                                self.isAlert = true
            }){
                Text("alert")
                    .padding()
            }
            RewardedAd(adDelegate: self.adDelegate)
                
                .alert(isPresented: self.$isAlert){
                    Alert(title: Text(""),
                          message: Text(""),
                          dismissButton: .default(Text("OK")))
                }
            // check adDelegate.adFullyWatched state -> after Ad finish this text shows
            if adDelegate.adFullyWatched{
                Text("Checked")
            }
            
        }
        .onAppear(){
            if adDelegate.adFullyWatched{
                self.isAlert = true
            }
        }
    }
}

Xcode:版本12.0.1

iOS:13.0

他的脾气

您在视图中使用了不同的委托实例,相反,您必须将委托从第一个视图注入第二个视图。

struct AdShow: View {
    
    @ObservedObject var adDelegate = RewardedAdDelegate()
    
    var body: some View {
        
        RewardedAd(adDelegate: self.adDelegate)      // << here inject !!

// ... other code

struct RewardedAd: View {
    
@EnvironmentObject var appState: AppState
@ObservedObject var adDelegate: RewardedAdDelegate     // << here declare !!

// ... other code

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google AdMob测试横幅未显示

来自分类Dev

Google AdMob测试横幅未显示

来自分类Dev

Google Play + Admob关联

来自分类Dev

Google AdMob与AdSense

来自分类Dev

Google Admob集成错误

来自分类Dev

为Google Play以外的应用显示Admob广告

来自分类Dev

在刷新或登录Google Plus之前,AdMob不会显示横幅

来自分类Dev

使用Google Play服务SDK的Android Admob不显示广告

来自分类Dev

在将应用发布到Google Play之前如何测试AdMob?

来自分类Dev

如何在共享项目中使用 Google Admob?

来自分类Dev

Google Play Admob与Phonegap集成

来自分类Dev

对Google AdMob SDK使用cocoaPods

来自分类Dev

Google AdMob 7与cocoapods的集成

来自分类Dev

Google Play服务和admob

来自分类Dev

admob弃用sdk替换为Ads SDK 7.0.0-如何仅在Google Play服务中升级admob jar

来自分类Dev

如何同时使用adMob和(Google Map API)Google Play服务?

来自分类Dev

测试广告是否显示但Google admob的phonegap构建应用中未显示原始广告

来自分类Dev

无法显示AdMob横幅

来自分类Dev

无法显示AdMob横幅

来自分类Dev

未显示Admob横幅

来自分类Dev

离子Admob不显示

来自分类Dev

Android AdMob不显示

来自分类Dev

admob Google Play非页内广告-广告未加载时显示内置活动

来自分类Dev

Google Play服务上的广告决策显示APK中存在Admob

来自分类Dev

有什么办法可以在Android Recycler View中显示Google Admob

来自分类Dev

在同一活动中显示横幅广告和插页式广告是否符合Google admob政策?

来自分类Dev

我的横幅视图未在SpriteKit Swift 2中显示(Google AdMob)

来自分类Dev

SwiftUI-Google AdMob插页式广告未显示在onAppear中

来自分类Dev

在同一活动中显示横幅广告和插页式广告是否符合Google admob政策?

Related 相关文章

热门标签

归档