我有一个单独的类来处理我的adMob
代码。
在这个课程中,我有所有的听众方法,如:
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {...}
在我的SKScene中,我展示了RewardedAds
,我还需要一个在调用rewardBasedVideoAd
方法时调用的方法。
我试图像这样实现delegate
方式:
在AdsManager
班:
protocol Ads_Rewarded_SupportDelegate: class{
func rewardedFinishSuccessfuly()
func rewardedAdClosed()}
在Ads_Rewarded_Support
我添加了:
weak var delegate: Ads_Rewarded_SupportDelegate?
在
中func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {
delegate?.rewardedFinishSuccessfuly()}
在我的SKScene:
class GameScene: SKScene, Ads_Rewarded_SupportDelegate {
private let rewardedAd = Ads_Rewarded_Support()
rewardedAd.delegate = self
最终:
func rewardedFinishSuccessfuly() {
print("rewarded Finish Successfuly")
}
但我仍然不能调用这个rewardedFinishSuccessfuly
方法。
当SKScene
被调用时,如何在rewardBasedVideoAd
中调用我的方法?
如果有帮助,这里是项目的链接: project on Github
编辑:
当我从应用激活委托方法的GameScene
手动方法调用时,它可以工作。所以我的问题出在pointer
。它不会保持实例,所以当调用didRewardUserWith
时,我的GameScene
不再是委托。
知道如何解决这个问题吗?
答案 0 :(得分:1)
您对Ads_Rewarded_SupportDelegate
的实施很好。
您遇到的问题是因为reward based video ad fails to load。
因此,以下内容不会被调用:
func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward)
func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd)
检查您的控制台日志,您将看到:
You are currently using version 7.25.0 of the SDK.
Please consider updating your SDK to the most recent SDK version
to get the latest features and bug fixes.
Error Domain=com.google.ads Code=1 "Request Error: No ad to show."
UserInfo={NSLocalizedDescription=Request Error: No ad to show.,
NSLocalizedFailureReason=Request Error: No ad to show.}
我按照这里的推荐做。希望这能解决您所遇到的问题!
答案 1 :(得分:0)
有效!
问题是我指向AdsSupport
类的指针没有活着。
我补充说:
return Ads_Rewarded_Support.rewardedAdsPointer!
并调用广告:
rewardedAd = Ads_Rewarded_Support().presentRewardAdFor(scene: self)
然后我将委托设置为自己。 感谢您尽力帮助我解决此问题。