Cocoscreator接穿山甲IOS SDK,RenderFail

  • Creator 版本:2.1.2

  • 目标平台: IOS

  • 详细报错信息,包含调用堆栈:
    nativeExpressRewardedVideoAdViewRenderFail
    code:107

2020-03-02 19:09:20.021232+0800 TrailerBattle2-mobile[88532:1047671] cyj loadRewardVideoAdWithSlotID
2020-03-02 19:09:20.812121+0800 TrailerBattle2-mobile[88532:1047671] 【BUAdDemo】-[BUDExpressRewardedVideoViewController nativeExpressRewardedVideoAdDidLoad:]
2020-03-02 19:09:20.813211+0800 TrailerBattle2-mobile[88532:1047671] 【BUAdDemo】-[BUDExpressRewardedVideoViewController nativeExpressRewardedVideoAdDidDownLoadVideo:]
2020-03-02 19:09:26.144393+0800 TrailerBattle2-mobile[88532:1047671] 【BUAdDemo】-[BUDExpressRewardedVideoViewController

  • 重现方式:
    正常接入SDK

  • 出现概率:必现

  • 额外线索:
    来自穿山甲的回复
    2020-03-02 19:48:15
    1、没有用的广告需要及时的进行remove,否则会导致内存过多
    2、渲染超时107问题,请按如下原因进行排查:
    1). 网络原因
    2). 硬件原因
    3). 建议可以更换手机或者网络环境测试
    4). 部分开发者书写代码 不规范也有可能导致107产生。建议检查广告初始化调用位置或广告展示时机是否在主线程操作
    5). 部分开发者第一次真机运行时会出现107错误,建议断开数据线连接,多尝试几遍即可,由于用户不像开发者会使用真机去运行项目,用户使用正常即可,您那边真机运行第一次107,对用户来说是没有任何影响的。 6). 部分开发者同时预加载两种不同类型的广告,也会出现107的情况,建议两种类型的广告不要同时预加载或中间间隔一段时间再进行第二种广告的加载请求
    7).是否做了劫持处理,将webview用来渲染的url给拦截了,然后导致webview渲染失败
    8)可以将+ (void)setOfflineType:(BUOfflineType)type;设置为none,尝试一下 建议您按照以上几种情形进行排查,尝试更换手机查看是否出现渲染失败的情况。

以上是穿山甲官方回复。我自己测试了一下,使用我写的RewardViewControl(这个基本上就是穿山甲官方demo的BUDExpressRewardedVideoViewController)是可以正常载入和显示广告的。如果换成cocoscreator自己的显示控件RootViewController。每次都是RenderFail,错误码107。
我判断下来最有可能是webview用来渲染的url给拦截。我修改了cocos源码shouldStartLoadWithRequest方法,直接return YES或者NO都没有区别。
此外我还测试了创建两个UIViewController,一个是RewardViewControl,一个就是cocos的RootViewController,利用UINavigationController,pushViewController或者addsubview,都没有区别,只要有RootViewController,必然出现renderFail.我修改RewardViewControl,不直接继承UIViewController,而是继承RootViewController。一样稳定renderFail。

这个问题困然我好几天了,求大神和管理员赐教!

很坑的
可以下载 看看这个
https://www.wapcq.com/jingpindaima/1657.html

这没用啊,普通的viewcontroller是可以正常显示穿山甲广告的。
只是cocos的viewcontroller(RootViewController)不可以,

  • (void)loadView {
    // Set EAGLView as view of RootViewController
    self.view = (__bridge CCEAGLView *)cocos2d::Application::getInstance()->getView();
    }
    到底RootViewController做了什么?

已经解决了。原来是模拟器的锅。。。
醉了,之前打过一次包。真机测试坏的。后来改代码一直用模拟器测试,因为demo用模拟器可以加载广告,所以一直以为没接好。巨坑。。。