我有一個使用iAd系統,具有回退到AdMob廣告的iPhone應用程序:避免遞歸bannerView:didFailToReceiveAdWithError:iPad上
- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3f];
adBannerView.frame = CGRectMake(0, 410, 320, 50);
[UIView commitAnimations];
// hide the admob ad
if(adMobView != nil && adMobView.superview != nil) {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3f];
adMobView.frame = CGRectMake(0, 460, 320, 48);
[UIView commitAnimations];
}
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3f];
// hide banner
adBannerView.frame = CGRectMake(0, 460, 320, 50);
[UIView commitAnimations];
if(adMobView != nil && adMobView.superview != nil) {
[adMobView requestFreshAd];
} else {
adMobView = [AdMobView requestAdWithDelegate:self];
adMobView.frame = CGRectMake(0, 460, 320, 48);
[self.view addSubview:adMobView];
}
}
這完美的作品以及在iPhone上。但是,當應用程序在iPad上運行時,會發生這種情況; [self.view addSubview:adMobView];
(特別是對'self.view'的調用)將調用loadView,按照the ViewController.view reference,它會嘗試再次佈局AdBannerView,從而再次觸發失敗。
我認爲它與iPad上的窗口邊界比iPhone上的邊界更大/不同,以及決定是否嘗試加載AdBanner的規則。
一個解決方案可能是調整我已經硬編碼的邊界以進一步到外部(並因此超出iPad的更大範圍)。另一種解決方案是完全避免self.view調用/遞歸風險,並以另一種方式執行 - 但是,AdMobView有點難以置信,並且真的想要通過requestAdWithDelegate
實例化,如果我將其放在viewDidLoad中,那麼這會過早。
哪種方法是明智的?