未调用 Firebase 奖励视频委托方法
Firebase Rewarded Video Delegate methods not called
我已经使用 firebase 在我的应用中实现了奖励视频。我已经根据此页面完成了所有必要的工作:https://developers.google.com/admob/ios/rewarded-video
我导入了以下内容(关于广告):
import Firebase
import GoogleMobileAds
class ViewController: UIViewController, MFMailComposeViewControllerDelegate, GKGameCenterControllerDelegate, GADInterstitialDelegate, GADRewardBasedVideoAdDelegate, UIAlertViewDelegate {...}
所以我设置了委托并加载了一个广告:
rewardBasedVideo = GADRewardBasedVideoAd.sharedInstance()
rewardBasedVideo.delegate = self
if !adRequestInProgress && rewardBasedVideo?.isReady == false {
GADRewardBasedVideoAd.sharedInstance().delegate = self
rewardBasedVideo?.load(GADRequest(),
withAdUnitID: "ca-app-pub...")
adRequestInProgress = true
}
我按下按钮时也会调用广告:
if rewardBasedVideo?.isReady == true {
rewardBasedVideo?.present(fromRootViewController: self)
if !adRequestInProgress && rewardBasedVideo?.isReady == false {
rewardBasedVideo?.load(GADRequest(),
withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
//ca-app-pub-8020832369894951/1361675226
adRequestInProgress = true
}
那么,我拥有委托的所有功能:
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,
didRewardUserWith reward: GADAdReward) {
print("You eaerned $\(abbreviateNumber(num: (moneyPerSecond * 360.0) as NSNumber))")
money = UserDefaults.standard.double(forKey: moneyKey)
money += moneyPerSecond * 360.0
UserDefaults.standard.set(money, forKey: moneyKey)
}
func rewardBasedVideoAdDidReceive(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
adRequestInProgress = false
print("Reward based video ad is received.")
}
func rewardBasedVideoAdDidOpen(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
print("Opened reward based video ad.")
}
func rewardBasedVideoAdDidStartPlaying(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
print("Reward based video ad started playing.")
}
func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
print("Reward based video ad is closed.")
}
func rewardBasedVideoAdWillLeaveApplication(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
print("Reward based video ad will leave application.")
}
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,
didFailToLoadWithError error: Error) {
print("Reward based video ad failed to load.")
}
发生以下情况:我可以加载广告(之后是 rewardBasedVideoAdDidReceive 运行s),我可以观看广告并关闭广告。但是,应该奖励用户的功能并没有运行。我需要知道为什么这 运行 不正确,所以我可以适当地奖励用户。
你有没有想过这个问题?
我想我 运行 遇到了同样的问题。
我完全按照您在本节中所做的做了 "I also call the ad when I press a button:"。如果广告尚未准备好,我尝试在按 "play ad" 时加载另一个广告。
展示广告后,"isReady" 将设置为零。因此,在您的情况下,您总是会在展示一个广告后立即加载另一个广告。由于某些原因,当前 运行 广告在完成后不会触发 rewardBasedVideoAd 方法。
因此,解决此问题的方法应该是在广告未准备好时取消加载另一个广告。我建议在 rewardBasedVideoAd 完成后立即加载另一个广告。
所以改变这个:
if rewardBasedVideo?.isReady == true {
rewardBasedVideo?.present(fromRootViewController: self)
if !adRequestInProgress && rewardBasedVideo?.isReady == false {
rewardBasedVideo?.load(GADRequest(),
withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
//ca-app-pub-8020832369894951/1361675226
adRequestInProgress = true
}
对此:
if rewardBasedVideo?.isReady == true {
rewardBasedVideo?.present(fromRootViewController: self)
}
我已经使用 firebase 在我的应用中实现了奖励视频。我已经根据此页面完成了所有必要的工作:https://developers.google.com/admob/ios/rewarded-video
我导入了以下内容(关于广告):
import Firebase
import GoogleMobileAds
class ViewController: UIViewController, MFMailComposeViewControllerDelegate, GKGameCenterControllerDelegate, GADInterstitialDelegate, GADRewardBasedVideoAdDelegate, UIAlertViewDelegate {...}
所以我设置了委托并加载了一个广告:
rewardBasedVideo = GADRewardBasedVideoAd.sharedInstance()
rewardBasedVideo.delegate = self
if !adRequestInProgress && rewardBasedVideo?.isReady == false {
GADRewardBasedVideoAd.sharedInstance().delegate = self
rewardBasedVideo?.load(GADRequest(),
withAdUnitID: "ca-app-pub...")
adRequestInProgress = true
}
我按下按钮时也会调用广告:
if rewardBasedVideo?.isReady == true {
rewardBasedVideo?.present(fromRootViewController: self)
if !adRequestInProgress && rewardBasedVideo?.isReady == false {
rewardBasedVideo?.load(GADRequest(),
withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
//ca-app-pub-8020832369894951/1361675226
adRequestInProgress = true
}
那么,我拥有委托的所有功能:
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,
didRewardUserWith reward: GADAdReward) {
print("You eaerned $\(abbreviateNumber(num: (moneyPerSecond * 360.0) as NSNumber))")
money = UserDefaults.standard.double(forKey: moneyKey)
money += moneyPerSecond * 360.0
UserDefaults.standard.set(money, forKey: moneyKey)
}
func rewardBasedVideoAdDidReceive(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
adRequestInProgress = false
print("Reward based video ad is received.")
}
func rewardBasedVideoAdDidOpen(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
print("Opened reward based video ad.")
}
func rewardBasedVideoAdDidStartPlaying(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
print("Reward based video ad started playing.")
}
func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
print("Reward based video ad is closed.")
}
func rewardBasedVideoAdWillLeaveApplication(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
print("Reward based video ad will leave application.")
}
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,
didFailToLoadWithError error: Error) {
print("Reward based video ad failed to load.")
}
发生以下情况:我可以加载广告(之后是 rewardBasedVideoAdDidReceive 运行s),我可以观看广告并关闭广告。但是,应该奖励用户的功能并没有运行。我需要知道为什么这 运行 不正确,所以我可以适当地奖励用户。
你有没有想过这个问题? 我想我 运行 遇到了同样的问题。
我完全按照您在本节中所做的做了 "I also call the ad when I press a button:"。如果广告尚未准备好,我尝试在按 "play ad" 时加载另一个广告。
展示广告后,"isReady" 将设置为零。因此,在您的情况下,您总是会在展示一个广告后立即加载另一个广告。由于某些原因,当前 运行 广告在完成后不会触发 rewardBasedVideoAd 方法。
因此,解决此问题的方法应该是在广告未准备好时取消加载另一个广告。我建议在 rewardBasedVideoAd 完成后立即加载另一个广告。
所以改变这个:
if rewardBasedVideo?.isReady == true {
rewardBasedVideo?.present(fromRootViewController: self)
if !adRequestInProgress && rewardBasedVideo?.isReady == false {
rewardBasedVideo?.load(GADRequest(),
withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
//ca-app-pub-8020832369894951/1361675226
adRequestInProgress = true
}
对此:
if rewardBasedVideo?.isReady == true {
rewardBasedVideo?.present(fromRootViewController: self)
}