英文:
How do I show a view on dismiss of a video reward ad?
问题
在此SwiftUI代码中,当点击播放按钮时,将显示一个视频奖励广告。在此视频广告被关闭后,我想显示一个视图,上面写着"你观看了广告"。
在视频奖励广告被关闭后,我想显示一个视图,向用户解释奖励,并由右上角的"x"关闭。
这是我的代码:
struct EarnRewards: View {
private var rewardedAdView = RewardedAdView()
fileprivate func videoAdButton(_ closure: @escaping () -> Void) -> some View {
return Button {
print("Tapped Video Button")
closure()
} label: {
Image(systemName: "play.fill")
.foregroundColor(.black)
}
}
var body: some View {
VStack {
videoAdButton {
self.rewardedAdView.showAd {
print("Reward the user")
// 在这里显示一个视图,例如一个弹出框,内容为"你观看了广告"
}
}
}
}
}
final class RewardedAdView: NSObject, GADFullScreenContentDelegate {
var rewardedAd: GADRewardedAd?
var rewardFunction: (() -> Void)? = nil
override init() {
super.init()
loadRewarded()
}
func loadRewarded(){
let request = GADRequest()
GADRewardedAd.load(withAdUnitID: Constants.AdMob.rewardedAdUnitId,
request: request, completionHandler: { (ad, error) in
if let error = error {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
return
}
self.rewardedAd = ad
self.rewardedAd?.fullScreenContentDelegate = self
})
}
func showAd(_ rewardFunction: @escaping () -> Void){
if let ad = rewardedAd,
let root = UIApplication.shared.windows.first?.rootViewController {
ad.present(fromRootViewController: root,
userDidEarnRewardHandler: {
let reward = ad.adReward
print(reward)
rewardFunction()
})
} else {
print("Ad wasn't ready")
}
}
func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
if let rewardFunction = rewardFunction {
rewardFunction()
}
}
/// Tells the delegate that the ad failed to present full screen content.
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
print("Ad did fail to present full screen content.")
}
/// Tells the delegate that the ad dismissed full screen content.
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("Ad did dismiss full screen content.")
// 在这里触发显示你想要的视图,例如解释奖励的视图
}
}
你可以在adDidDismissFullScreenContent
方法中触发显示你想要的视图,例如一个解释奖励的视图。
英文:
In this SwiftUI code, when the play button is tapped, a video reward ad is shown. After this video ad has been dismissed, I want to show a view saying ("you watched an ad").
The view I want to show after the video reward ad has been dismissed will explain the rewards to the user and will be dismissed by an "x" in the top right.
Here is my code:
struct EarnRewards: View {
private var rewardedAdView = RewardedAdView()
fileprivate func videoAdButton(_ closure: @escaping () -> Void) -> some View {
return Button {
print("Tapped Video Button")
closure()
} label: {
Image(systemName: "play.fill")
.foregroundColor(.black)
}
}
var body: some View {
VStack {
videoAdButton {
self.rewardedAdView.showAd {
print("Reward the user")
}
}
}
}
}
final class RewardedAdView: NSObject, GADFullScreenContentDelegate {
var rewardedAd: GADRewardedAd?
var rewardFunction: (() -> Void)? = nil
override init() {
super.init()
loadRewarded()
}
func loadRewarded(){
let request = GADRequest()
GADRewardedAd.load(withAdUnitID: Constants.AdMob.rewardedAdUnitId,
request: request, completionHandler: { (ad, error) in
if let error = error {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
return
}
self.rewardedAd = ad
self.rewardedAd?.fullScreenContentDelegate = self
})
}
func showAd(_ rewardFunction: @escaping () -> Void){
if let ad = rewardedAd,
let root = UIApplication.shared.windows.first?.rootViewController {
ad.present(fromRootViewController: root,
userDidEarnRewardHandler: {
let reward = ad.adReward
print(reward)
rewardFunction()
})
} else {
print("Ad wasn't ready")
}
}
func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
if let rewardFunction = rewardFunction {
rewardFunction()
}
}
/// Tells the delegate that the ad failed to present full screen content.
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
print("Ad did fail to present full screen content.")
}
/// Tells the delegate that the ad dismissed full screen content.
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("Ad did dismiss full screen content.")
}
}
How do I display a view on dismiss of the video ad?
答案1
得分: 1
你可以在EarnRewards视图中添加一个@State属性,用于跟踪视频广告的关闭。
// 定义这个属性
@State private var adDismissed = false
var body: some View {
ZStack {
VStack {
if !adDismissed {
videoAdButton {
self.rewardedAdView.showAd {
print("奖励用户")
self.adDismissed = true
}
}
}
}
if adDismissed {
VStack {
Text("您观看了一则广告")
Button(action: {
self.adDismissed = false
}) {
Image(systemName: "xmark.circle.fill")
}
}
.padding()
.background(Color.white)
.cornerRadius(10)
}
}
}
英文:
You can add a @State property in your EarnRewards View which will track the dismiss of the video ad
// Define this
@State private var adDismissed = false
var body: some View {
ZStack {
VStack {
if !adDismissed {
videoAdButton {
self.rewardedAdView.showAd {
print("Reward the user")
self.adDismissed = true
}
}
}
}
if adDismissed {
VStack {
Text("You watched an ad")
Button(action: {
self.adDismissed = false
}) {
Image(systemName: "xmark.circle.fill")
}
}
.padding()
.background(Color.white)
.cornerRadius(10)
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论