2015-06-06 2 views
1

Я использую следующий код для настройки общего баннера iAd.Общий баннер iAd bannerViewDidLoadAd не называется

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    _adView = [[ADBannerView alloc]init]; 
} 

ViewController.m

-(void) viewWillAppear:(BOOL)animated { 
    AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication ]delegate]; 
    _adView = [appdelegate adView]; 
    _adView.delegate = self; 
    self.canDisplayBannerAds = true; 
} 

- (void)bannerViewDidLoadAd:(ADBannerView *)banner { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1]; 
    [banner setAlpha:1]; 
    [UIView commitAnimations]; 
} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1]; 
    [banner setAlpha:0]; 
    [UIView commitAnimations]; 
} 

bannerView:didFailToReceiveAdWithError становится называется, как и ожидалось, но bannerViewDidLoadAd никогда не вызывается. Я пытаюсь переместить некоторые кнопки на экране, когда загружается баннер iAd.

ответ

1

Ваш общий баннер не выглядит как один ADBannerView. Похоже, вы установили несколько @property для своего ADBannerView в свои AppDelegate.h и ваш ViewController.h. Кроме того, self.canDisplayBannerAds = true создает полностью новых и разныхADBannerView для вас. self.canDisplayBannerAds = true может использоваться для без проблем Способ реализации iAds в вашем приложении. Это создаст для вас ADBannerView и покажет или скроет ADBannerView в зависимости от того, получает ли оно объявление или нет из сети iAd. Вы захотите удалить это из своего viewDidLoad, если вы планируете самостоятельно реализовать ADBannerView.

Вот что ваша реализация вашей общей ADBannerView должен выглядеть следующим образом:

AppDelegate.h

#import <UIKit/UIKit.h> 
@import iAd; 

@interface AppDelegate : UIResponder <UIApplicationDelegate> { 

} 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) ADBannerView *iAdView; 

@end 

AppDelegate.m

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    _iAdView = [[ADBannerView alloc]init]; 
    return YES; 
} 

ViewController.h

#import <UIKit/UIKit.h> 
#import "AppDelegate.h" 

@interface ViewController : UIViewController <ADBannerViewDelegate> 

@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController () 

@end 

@implementation ViewController { 
    AppDelegate *appDelegate; 
} 

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    appDelegate = (AppDelegate *)[[UIApplication sharedApplication ]delegate]; 
    appDelegate.iAdView.delegate = self; 
    appDelegate.iAdView.frame = CGRectMake(0, 0, appDelegate.iAdView.frame.size.width, appDelegate.iAdView.frame.size.height); 
    [self.view addSubview:appDelegate.iAdView]; 

    // You created another adView property in your ViewController.h? 
    //_adView = [appdelegate adView]; 
    //_adView.delegate = self; 

    // This will actually create ANOTHER ADBannerView 
    // Do not use when creating your own ADBannerView 
    //self.canDisplayBannerAds = true; 
} 

-(void)bannerViewDidLoadAd:(ADBannerView *)banner { 
    NSLog(@"iAd LOADED"); 
    [UIView beginAnimations:nil context:NULL]; 
    appDelegate.iAdView.alpha = 1.0; 
    [UIView commitAnimations]; 
} 

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { 
    NSLog(@"iAd FAILED"); 
    [UIView beginAnimations:nil context:NULL]; 
    appDelegate.iAdView.alpha = 0.0; 
    [UIView commitAnimations]; 
} 
+0

Спасибо Daniel. Если я использую self.canDisplayBannerAds = true; и устранить другие рекламные баннеры, он все равно вызовет bannerViewDidLoadAd :? –

+0

@JasonBestor просто положил, нет. Вы можете достичь этого с помощью некоторого кода, но если вы это сделаете, вы можете также реализовать баннер iAd, как я показал выше. –

+0

@DanialStorm Я спрашиваю, потому что у моего приложения есть несколько других представлений, в которых используется self.canDisplayBannerAds = true; автоматически перемещается вверх по представлению таблицы, когда появляется объявление, и тому подобное. Также, когда я вернусь к основному виду, исчезает вид баннера. –

Смежные вопросы