15

我将 ADBannerView 添加到视图中,当我加载应用程序时,我收到以下消息:

ADBannerView:警告横幅视图 (0x7a023c0) 有广告,但可能会被遮挡。此消息仅在每个横幅视图中打印一次。

据我所知,整个横幅都在屏幕上可见。这真的是个问题吗?或者它只是一个我可以忽略的警告?

4

8 回答 8

22

正如 Stephen Darlington 所说,找出问题所在是个好主意。在代码中(从视图控制器)仔细检查这一点的一种简单方法是:

     // bring your bannerView to the front
   [self.view bringSubviewToFront:bannerView];

     // and make sure it's positioned onscreen.
    bannerView.frame = CGRectMake(0.0, 0.0, bannerView.frame.size.width, bannerView.frame.size.height);

假设您的 AdBannerView 有一个名为 bannerView 的 iVar / IBOutlet,这将解决任何界面构建器定位问题,并确保bannerView 没有被任何东西覆盖。

根据我的经验,如果广告不在屏幕上,没有什么不好的事情发生,但是,iAd 在知道它完全在屏幕上之前不会加载新广告。所以,当你启动你的应用程序时,

  1. 您的 AdBannerView 将尝试加载广告,无论它是否在屏幕上。

  2. 根据是否成功,您的 AdBannerViewDelegate 将收到

    a)bannerViewDidLoadAd:(继续第 3 步)或

    b)bannerView:didFailToReceiveAdWithError:(AdBannerView 将自行重试)

  3. 那时,球就在你的球场上,如果实际上它确实加载了广告,那么如何处理所述横幅视图。在代码中检查这一点的一种简单方法是 yourBannerView.bannerLoaded,如果它有广告,它将返回 YES,如果没有,它将返回 NO。所以...

  4. 在 AdBannerView 成功加载其初始广告后,您如何处理它决定了它在未来的行为方式。您不必立即将它放在屏幕上——选择在您的应用程序中有意义的时间。但是,已成功加载广告的横幅视图将不会尝试加载另一个广告,直到它出现在屏幕上。(有道理,对吧?)棘手的部分是......

    4b)您也不会从该bannerView获得任何新的委托消息,因此如果您在收到bannerViewDidLoadAd委托消息后没有立即在屏幕上移动bannerView,您必须自己实现某种控制结构来处理当您确实将其移到屏幕上时,它将开始向广告服务器请求更多广告,并且您将收到更多委托消息,并且循环重新开始。

因此,总结一下:如果您想提供更多 iAd 并获得报酬,那么只有当您的 iAd 被遮盖时才会出现问题。但是,最近 eCPM 一直非常非常低,所以也许这毕竟不是这样的问题 ;)

于 2011-02-28T18:09:30.650 回答
7

为了加入这个讨论,当我修改center属性以将广告移动到屏幕外时,我收到了这条消息。我使用 UIView 动画将广告滑到屏幕上。

经过一些试验,我想出了如何在不导致出现消息的情况下做到这一点。adBannerView.hidden诀窍是在等待广告加载时隐藏以将属性设置为 YES。加载后,我只需要确保仅提交动画后将隐藏属性设置为 NO:

-(void) fadeAdIn:(UIView*)view
{
    float offsetY = view.frame.size.height * (bannerOnBottom ? 1 : -1);

    CGPoint pos = [self getBannerPosition];
    view.center = CGPointMake(pos.x, pos.y + offsetY);

    [UIView beginAnimations:@"AdIn" context:nil];
    [UIView setAnimationDuration:1.0];
    view.center = pos;
    [UIView commitAnimations];

    // must unhide AFTER animation has been committed to prevent "ad obstructed"
    view.hidden = NO;
}
于 2011-12-11T13:08:35.523 回答
2

就像编译器警告一样,我认为即使它不会立即引起问题,您也应该尝试深入了解它。如果我是 Apple,我会将我的广告发送到实际展示它们的应用程序(我不是说他们这样做),因此也可能存在财务方面的问题。

我见过的几个问题:

  • iAd 框架略微偏离,可能仅偏离屏幕一两个像素
  • 您不小心创建了两个 iAd,一个在屏幕上,另一个隐藏第一个之后
于 2010-11-15T10:17:32.837 回答
1

LearnCocos2D 的答案是我的解决方案。不确定这是否是 Cocos2D(我正在使用)的特定问题。我的问题是我使用 Apple 推荐使用的块使用“新”样式动画, animateWithDuration:delay:options:animations:completion: 当我使用这些时,我得到了模糊的警告。我想问题是视图在动画时被部分遮挡,因此会发出警告,但显然,在它完成动画之前你不能让它完全可见,除非你只是想在屏幕上弹出它,这很难看。

没关系,因为使用 beginAnimations: 和 commitAnimations: 切换回“旧”样式动画确实消除了我的警告。我很好奇这个警告是否意味着您实际上错过了广告收入,或者它只是烦人但实际上不是问题。

于 2012-05-12T02:24:35.553 回答
1

我遇到了同样的问题,但原因是我在上面有 OpenFeint 通知栏,例如高分,成就解锁等。它滑入然后滑出,不会停留很长时间,所以我不认为它是一个问题。

如果您将 ADS 放在顶部,那么用户将看不到 OpenFeint 通知,这将是另一个问题,我不知道如果您在屏幕的不同位置有 ADS 和 OpenFeint 是否会发生这种情况,我没有尝试将其作为我的应用程序的底部屏幕上到处都是按钮,因此只有屏幕顶部可用。

于 2011-04-08T12:07:18.373 回答
1

另一种选择是监听状态栏调整大小事件并在发生这种情况时移动 iAd,以便它不会重新定位到屏幕外(导致该警告并且没有提供的广告)。

在您的应用程序委托中,点击此功能:

  • (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame // 检查 newStatusBarFrame.size.height 并相应地为您的 iAd 框架设置动画。
于 2011-04-17T17:58:13.850 回答
1

当我将 ADBannerView 添加到 UIScrollView 时,我收到此消息。在这种情况下,广告可能会被遮挡。

于 2011-09-29T14:40:09.373 回答
0

我有这样的代码:

if (animate)
{
    [UIView animateWithDuration:0.5 animations:^{
        self.adBannerView.frame = adBannerFrame;
        self.otherViewFrame.frame = otherViewFrame;
        }
     ];
}
else
{
    self.adBannerView.frame = adBannerFrame;
    self.otherViewFrame.frame = otherViewFrame;
}

经过一些试验,我发现初始化的顺序应该在 if 和 else 腿中颠倒。

    self.otherViewFrame.frame = otherViewFrame;
    self.adBannerView.frame = adBannerFrame;

所以这个想法是不要让另一个视图覆盖 AdBannerView,即使是几微秒。

于 2012-11-10T14:54:28.630 回答