如何从Swift中另一个类的侦听器调用SKScene中的方法?

时间:2018-01-28 02:40:49

标签: swift delegates admob skscene

我有一个单独的类来处理我的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不再是委托。 知道如何解决这个问题吗?

2 个答案:

答案 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)

然后我将委托设置为自己。 感谢您尽力帮助我解决此问题。