我已经说明了iAd代码,但无论是在模拟器上还是在我的设备上,它都会让iAd在一段时间后消失,即使互联网连接正常。我的实施有没有出错,或者这只是预料到的?下面是代码和控制台,它显示了两者的调用频率。谢谢!
- (void)viewDidLoad {
adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
adView.frame = CGRectOffset(adView.frame, 0, 435); //orginally -50
adView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifier320x50];
adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
[self.view addSubview:adView];
adView.delegate = self;
self.bannerIsVisible = NO;
[super viewDidLoad];
}
- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
NSLog(@"bannerViewDidLoadAd");
if (!self.bannerIsVisible)
{
[UIView beginAnimations:@"animateAdBannerOn" context:NULL];
// banner is invisible now and moved out of the screen on 50 px
banner.frame = CGRectOffset(banner.frame, 0, -25); //orginally 50
[UIView commitAnimations];
self.bannerIsVisible = YES;
}
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
NSLog(@"bannerViewRecievedError");
if (self.bannerIsVisible)
{
[UIView beginAnimations:@"animateAdBannerOff" context:NULL];
// banner is visible and we move it out of the screen, due to connection issue
banner.frame = CGRectOffset(banner.frame, 0, 25); //orginally -50
[UIView commitAnimations];
self.bannerIsVisible = NO;
}
}
- (void)dealloc {
NSLog(@"dealloc");
adView.delegate=nil;
[adView release];
[super dealloc];
}
控制台说的是什么:
2010-12-29 20:04:17.717 app[48943:207] bannerViewRecievedError
2010-12-29 20:04:52.410 app[48943:207] bannerViewRecievedError
2010-12-29 20:05:17.168 app[48943:207] bannerViewDidLoadAd
2010-12-29 20:05:47.166 app[48943:207] bannerViewDidLoadAd
2010-12-29 20:06:16.993 app[48943:207] bannerViewRecievedError
2010-12-29 20:06:46.803 app[48943:207] bannerViewDidLoadAd
2010-12-29 20:07:17.314 app[48943:207] bannerViewDidLoadAd
2010-12-29 20:07:47.140 app[48943:207] bannerViewRecievedError
2010-12-29 20:08:19.899 app[48943:207] bannerViewRecievedError
2010-12-29 20:08:46.978 app[48943:207] bannerViewDidLoadAd
2010-12-29 20:09:17.106 app[48943:207] bannerViewRecievedError
2010-12-29 20:09:46.930 app[48943:207] bannerViewDidLoadAd
2010-12-29 20:10:17.114 app[48943:207] bannerViewDidLoadAd
2010-12-29 20:10:47.609 app[48943:207] bannerViewDidLoadAd
答案 0 :(得分:1)
不,这里没问题。 Apple经常提供新的模拟广告,有时您会遇到错误,以测试您的错误处理功能。该错误可能意味着“无库存可用”,这会使您的广告消失。来自relevant developer documentation:
如果发生错误,则显示横幅视图 打电话给代表 bannerView:didFailToReceiveAdWithError: 方法。当这发生时,你的 应用程序必须隐藏横幅视图。 清单2-3显示了一种可能的方法 实现这一点。它使用相同的 属性如清单2-2所示 横幅是否可见如果 横幅是可见的并且是错误的 发生时,它将横幅移开 屏幕。
即使错误发送到您的 代表,横幅视图继续 尝试下载新广告。 这两个代表的组合 方法允许您显示 横幅广告只有在广告时才有 加载。
良好的错误处理实现很好!
答案 1 :(得分:0)
它旨在确保您可以正确处理iAd错误。它将随机提供错误以及良好的测试数据。