iAd / google插页式广告后,应用冻结

时间:2014-10-25 11:13:23

标签: ios cocos2d-iphone iad interstitial

我在cocos2d(版本3.1.0)中遇到了一个非常奇怪的插页式广告问题。这是我用来加载两个插页式广告的代码。

- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
    [interstitial presentFromRootViewController:[CCDirector sharedDirector]];
    interstitial.delegate = nil;
    interstitial = nil;
}
- (void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd {
    [interstitialAd presentFromViewController:[CCDirector sharedDirector]];

}

一切看起来都很好并且工作正常,直到您在插入插页式广告之前将手指放在显示屏上,然后当您取消触摸(释放手指)并关闭弹出窗口时应用程序变得无法响应,触摸处理程序会执行操作根本不工作,你必须重新启动应用程序。我挣扎了几个小时没有成功找到问题。可能是 CCDirector 停止和启动动画方法吗?

1 个答案:

答案 0 :(得分:1)

我找到了bug的解决方法。我所做的是在显示google / iAD插页式广告之前停用回复管理器,您可以看到以下方法。

- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
    [[[CCDirector sharedDirector]responderManager]setEnabled:false];
    [interstitial presentFromRootViewController:[CCDirector sharedDirector]];
    interstitial.delegate = nil;
    interstitial = nil;
}
- (void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd {
    [[[CCDirector sharedDirector]responderManager]setEnabled:false];
    [interstitialAd presentFromViewController:[CCDirector sharedDirector]];
}

之后我通过输入以下代码在 CCDirectorIOS.m 文件中的 - (void)startAnimation 中再次启用它。

if (![[self responderManager]isEnabled]) {
        [[self responderManager]setEnabled:true];
}

我知道这不是一个优雅的解决方案,因为直接更改库代码并不总是一个好主意,但我找不到任何其他选择。我认为这是一个 cocos2d 错误,但我不确定,可能是更有经验的人可以指出确切的问题。我不知道最新的cocos2d版本中是否存在此错误。

编辑:此行为也出现在最新版本中。