AdMob 広告にフォールバックする iAd を使用する iPhone アプリがあります。
- (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」への呼び出し) は、ViewController.view 参照に従って loadView を呼び出します。これは、AdBannerView を再度レイアウトしようとします。これにより、失敗が再びトリガーされます。
iPadのウィンドウの境界がiPhoneよりも大きい/異なること、およびAdBannerをロードするかどうかを決定するルールに関係があると思います。
1 つの解決策はおそらく、ハードコーディングした境界をさらに外側 (つまり、iPad のより広い範囲の外側) に調整することです。もう 1 つの解決策は、self.view 呼び出し / 再帰のリスクを完全に回避し、別の方法で実行することrequestAdWithDelegate
です。
どのアプローチが賢明ですか?