You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tvOS集成GoogleInteractiveMediaAds遇IMAAdDisplayContainer属性nil错误求助

解决tvOS集成Google IMA时的adContainerViewController为空错误

问题原因

报错明确指出IMAAdDisplayContainer的adContainerViewController属性为nil,核心原因是创建容器时传入的viewController参数(代码中为self.episodeController)未正确初始化或已被释放,导致值为nil。

修复步骤

  • 确保视图控制器实例有效:
    检查self.episodeController是否在调用requestAdsViaSDK前已完成初始化并持有强引用,避免因未赋值或提前释放导致nil。如果当前方法所在的类本身就是UIViewController,直接传入self作为视图控制器参数会更可靠。

  • 修正字符串拼接错误:
    addRandomNumber方法中的字符串拼接语法错误,会生成无效的adTagUrl,需改成Swift标准的字符串插值语法。

修正后的代码示例

func requestAdsViaSDK(onView: UIView) {
    self.currentView.isHidden = false
    setUpAdsLoader()
    let prerollTag = addRandomNumber(dfpUrl)
    print("Preroll tag", prerollTag)
    
    // 传入有效的视图控制器,此处假设当前类为UIViewController,直接传self
    let adDisplayContainer = IMAAdDisplayContainer(adContainer: onView, viewController: self)
    let request = IMAAdsRequest(
        adTagUrl: prerollTag,
        adDisplayContainer: adDisplayContainer,
        contentPlayhead: contentPlayhead,
        userContext: nil
    )
    adsLoader?.requestAds(with: request)
}

func setUpAdsLoader() {
    print("adsLoader==================================")
    adsLoader = IMAAdsLoader(settings: nil)
    adsLoader?.delegate = self
}

func addRandomNumber(_ str: String) -> String {
    let randomNumber = arc4random()
    // 修正字符串插值语法
    return "\(str)\(randomNumber)"
}

额外检查点

  • 确认contentPlayhead已正确初始化,否则也可能引发广告加载失败。
  • 验证修正后的prerollTag(即adTagUrl)格式正确,可直接在浏览器中访问测试是否能返回合法的广告配置。

内容的提问来源于stack exchange,提问作者kuldeep bhandari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:05:24