iAD 视图在广告关闭时冻结

Posted

技术标签:

【中文标题】iAD 视图在广告关闭时冻结【英文标题】:iAD View Freezes On Ad Close 【发布时间】:2014-03-23 18:28:59 【问题描述】:

好的,所以在模拟器上测试后发现这个问题只发生在实际设备上...我该如何解决这个问题?


我正在使用 SpriteKit 制作一个 ios 应用程序并正在实施 iAD。一切都或多或少地像我预期的那样工作,除了一件事。当我点击广告时,它会按预期将我带到全屏广告,但是当我关闭该广告时,当前视图会冻结,因为视觉上没有任何反应。我知道该应用程序仍在运行,因为当我再次单击横幅广告并再次关闭它时,游戏恢复正常并且游戏在视觉冻结的情况下进行了。这是在我的视图控制器类(iAD 委托)中初始化横幅的方式:
self.canDisplayBannerAds = YES;

CGRect bannerFrame = CGRectMake(0, 20, scene.size.width, 50);

banner = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
banner.delegate = self;
banner.frame = bannerFrame;
[banner setAlpha:0];
[self.view addSubview:banner];

这些是加载方法,也在视图控制器类中:

- (void) bannerViewDidLoadAd:(ADBannerView *) bannerM

    NSLog(@"Ad Loaded");
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1];
    [bannerM setAlpha:1];
    [UIView commitAnimations];


- (void) bannerView:(ADBannerView *)bannerM didFailToReceiveAdWithError:(NSError *)error

    NSLog(@"Ad Failed");
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1];
    [bannerM setAlpha:0];
    [UIView commitAnimations];

我真的不明白这个问题或它为什么会发生......任何帮助将不胜感激!

谢谢, 强约书亚

EDIT 以下是横幅广告打开和关闭时调用的两个方法:

- (BOOL) bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave

    if(playing)
    
        NSLog(@"Ad Pause");
        SKView *v = (SKView *)self.view;
        NSLog(@"2");
        SKScene *s = (SKScene *)v.scene;
        NSLog(@"3");
        WBPlayScene *p = (WBPlayScene *) s;
        NSLog(@"4");
        [p.logic pause:YES];
        NSLog(@"Done");
    
    return YES;


- (void) bannerViewActionDidFinish:(ADBannerView *)banner

    if(playing)
    
        NSLog(@"Ad Unpause");
        [((WBPlayScene *)((SKView *)self.view).scene).logic pause:NO];
    

已修复 所有这些 NSLogs 的原因是当我尝试暂停游戏时游戏崩溃了。到达“2”后游戏崩溃,所以在SKScene *s = (SKScene *)v.scene;。它给出了错误[UIView scene]: unrecognized selector sent to instance,我不明白为什么...... 解决方案:为了解决这个附带问题,我将 self.view 更改为 self.originalContentView,它获得了 SKView 而不是广告横幅的视图。

非常感谢您的帮助!

【问题讨论】:

你实现protocol的方法bannerViewActionShouldBegin:willLeaveApplication:bannerViewActionDidFinish:了吗? @lootsch 是的,我正在尝试在用户实际进入游戏时使用它们暂停游戏。如果我正确地实现了它们,我会发现它们,所以我会将它们添加到问题中(以及我遇到的一个可能很小的问题)。 我认为问题在于,self.view 不是SKView(如预期的那样)而是UIView。试着检查一下。这应该可以暂停您的游戏。 最近几周我们反复遇到这种情况:iAD 视图已将您的 SKView 的 viewController.view 替换为 iAd 横幅视图。我不知道为什么会发生这种情况,但 iAd 设置出现问题似乎是一个反复出现的问题。 @lootsch 好的,这就是这个问题的主要解释,但第一个问题(我最初创建这篇文章的目的)的原因是什么,关于屏幕不刷新? 【参考方案1】:

已解决:我不得不删除启用广告显示 self.canDisplayBannerAds 的调用,因为它干扰了我自己创建的横幅。

【讨论】:

以上是关于iAD 视图在广告关闭时冻结的主要内容,如果未能解决你的问题,请参考以下文章

iAd 的广告标识符? [关闭]

关闭导航弹出框后,共享 iAd 横幅会卸载广告

IAD 生命周期 - 关闭广告将应用程序返回到初始屏幕

在关闭视图 iAds 在 ios 5 ipad 中变为黑色。(深黑色)

使用 PhoneGap,并添加 iAd [关闭]

关闭模式视图控制器偶尔冻结应用程序,swift 3