我将ADBannerView添加到视图中,当我加载应用程序时,我收到以下消息:
ADBannerView:警告横幅视图(0x7a023c0)有广告但可能会被遮挡.此消息仅在每个横幅视图中打印一次.
据我所知,整个横幅在屏幕上可见.这真的是个问题吗?或者这只是一个我可以忽略的警告?
Chr*_*add 22
正如斯蒂芬达林顿所说,找出问题是个好主意.在代码中(从视图控制器)仔细检查这个的简单方法是:
// 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);
Run Code Online (Sandbox Code Playgroud)
假设您有一个名为bannerView的AdBannerView的iVar/IBOutlet,这将解决任何界面构建器定位问题,并确保bannerView未被任何内容覆盖.
根据我的经验,如果广告在屏幕外,则不会发生任何不良情况,但是,iAd不会加载新广告,直到它知道它完全在屏幕上.所以,当你启动你的应用程序时,
您的AdBannerView将尝试加载广告,无论是否在屏幕上.
根据是否成功,您的AdBannerViewDelegate将收到
a)bannerViewDidLoadAd :(继续步骤3)或
b)bannerView:didFailToReceiveAdWithError :( AdBannerView将自行重试)
那时候,球在你的球场上是关于如何处理所述bannerView,如果事实上它确实加载了一个广告.在代码中检查这一点的简单方法是yourBannerView.bannerLoaded,如果有广告则返回YES,否则返回NO.所以...
在成功加载其初始广告后,如何处理AdBannerView将决定它在未来的行为方式.您不必立即将其放在屏幕上 - 选择在您的应用程序中有意义的时间.但是,已成功加载广告的横幅视图不会尝试加载另一个广告,直到它在屏幕上.(有道理,对吗?)棘手的部分是....
4b)你也不会从该bannerView获得任何新的委托消息,所以如果你在获得bannerViewDidLoadAd委托消息时没有立即在屏幕上移动bannerView,你必须自己实现某种控制结构来处理什么时候,如果有的话,你可以在屏幕上移动它,此时它将开始向广告服务器询问更多广告,并且您将获得更多的委托消息,并且周期重新开始.
总而言之:如果您希望提供更多iAd并获得报酬,那么如果您的iAd被遮挡,那么这只是一个问题.然而,最近eCPM一直非常非常低,所以也许这毕竟不是一个问题;)
为了添加到此讨论中,我在修改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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13038 次 |
| 最近记录: |