iOS端IronSource激励视频代理设置问题求助
问题分析与修复方案
我看了你的代码,问题主要出在代理设置和广告展示的视图控制器参数这两个地方,这就是为什么广告关闭时rewardedVideoDidClose这类代理方法没触发的原因,下面给你一步步讲怎么修复:
1. 代理设置错误
你在viewDidLoad里写的:
IronSource.setRewardedVideoDelegate(DetailViewController)
这里传的是DetailViewController类本身,而不是当前的视图控制器实例,代理需要绑定到当前对象上,应该改成传self:
IronSource.setRewardedVideoDelegate(self)
2. 广告展示的ViewController参数错误
你调用展示广告的代码:
IronSource.showRewardedVideo(with:UIViewController(), placement: "DefaultRewardedVideo")
这里新建了一个空的UIViewController实例,广告需要依附在当前视图控制器上才能正确传递代理事件,应该改成传当前的self:
IronSource.showRewardedVideo(with: self, placement: "DefaultRewardedVideo")
修复后的完整代码
class DetailViewController: UIViewController, ISRewardedVideoDelegate { @IBAction func ironSourceActionAd(_ sender: Any) { // 修复:传递当前视图控制器self IronSource.showRewardedVideo(with: self, placement: "DefaultRewardedVideo") } // MARK: - ISRewardedVideoDelegate Methods public func rewardedVideoHasChangedAvailability(_ available: Bool) { } public func rewardedVideoDidEnd() { } public func rewardedVideoDidStart() { } public func rewardedVideoDidClose() { text() print("closed") } public func rewardedVideoDidOpen() { print("Opened") } public func rewardedVideoDidFailToShowWithError(_ error: Error!) { } public func didReceiveReward(forPlacement placementInfo: ISPlacementInfo!) { } public func didClickRewardedVideo(_ placementInfo: ISPlacementInfo!) { } override func viewDidLoad() { super.viewDidLoad() // 初始化IronSource,注意确保AppKey正确,且整个App只初始化一次 IronSource.initWithAppKey("72c23e35") // 修复:传递当前实例self作为代理 IronSource.setRewardedVideoDelegate(self) ISIntegrationHelper.validateIntegration() } // 你定义的text()方法 func text() { // 这里写你的业务逻辑 } }
额外注意事项
- 确保
placement: "DefaultRewardedVideo"这个广告位名称和你在IronSource后台配置的完全一致,大小写敏感 IronSource.initWithAppKey建议放在AppDelegate的didFinishLaunchingWithOptions方法里初始化,避免重复初始化- 可以通过
ISIntegrationHelper.validateIntegration()的输出来确认集成是否正确,查看Xcode控制台的日志信息
内容的提问来源于stack exchange,提问作者iOSHG
相关产品推荐
相关产品推荐

