didFailToReceiveAdWithError non funziona per i simulatori iOS 8

La mia mediazione iAd / AdMob funziona perfettamente con tutti i simulatori e dispositivi iOS 7. Tuttavia, iOS 8 ha fatto il metodoFailToReceiveAdWithError non funziona con nessun simulatore ma funziona con dispositivi iOS 8. Il problema è che non ho un dispositivo iPhone 6/6 + per testare. Quindi conto sul simulatore iOS 8.

-(void)bannerViewDidLoadAd:(ADBannerView *)banner{ [UIView beginAnimations:nil context:NULL]; iAd.frame=CGRectOffset (iAd.frame 0, -667); [UIView commitAnimations]; [UIView beginAnimations:nil context:NULL]; iAd.frame=CGRectOffset (iAd.frame 0, 0); [UIView commitAnimations]; } -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ [UIView beginAnimations:nil context:NULL]; iAd.frame=CGRectOffset (iAd.frame 0, -740); [UIView commitAnimations]; [UIView beginAnimations:nil context:NULL]; AdMob.frame=CGRectOffset (iAd.frame 0, -667); [UIView commitAnimations]; } 

Non so nemmeno se le coordinate didFailToReceive sono corrette poiché non ho modo di testare. Non capisco perché didFailToReceiveAdWithError non viene mai chiamato solo per i simulatori iOS 8? È un bug del simulatore iOS 8 o c’è qualcosa che posso fare per risolvere questo problema?

// ignora ^^

  -(AppDelegate *)appdelegate{ return (AppDelegate *) [[UIApplication sharedApplication] delegate]; } -(void)viewWillAppear:(BOOL)animated{ //iAD _iAdView= [[self appdelegate] iAdView]; _iAdView.delegate=self; screenBounds = [[UIScreen mainScreen] bounds]; [_iAdView setFrame:CGRectMake(0, 0, _iAdView.bounds.size.width, _iAdView.bounds.size.height)]; _iAdView.center = CGPointMake(screenBounds.size.width / 2, screenBounds.origin.y + (_iAdView.bounds.size.height / 2)); [self.view addSubview:_iAdView]; //ADMOB _adMobView= [[self appdelegate] adMobView]; _adMobView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait]; _adMobView.adUnitID = @"My-Unit-ID"; _adMobView.rootViewController = self; GADRequest *request =[GADRequest request]; request.testDevices = @[ @"Test-Number" ]; [_adMobView loadRequest:request]; [_adMobView setFrame:CGRectMake(0, 0, _adMobView.bounds.size.width, _adMobView.bounds.size.height)]; _adMobView.center = CGPointMake(screenBounds.size.width / 2, screenBounds.size.height - (_adMobView.bounds.size.height / 2)); [self.view addSubview:_adMobView]; } -(void)viewWillDisappear:(BOOL)animated{ //Whether I remove this or not, nothing changes //iAD _iAdView.delegate = nil; _iAdView=nil; _iAdView.alpha=0.0; //ADMOB _adMobView.delegate=nil; _adMobView=nil; _adMobView.alpha=0.0; } -(void)bannerViewDidLoadAd:(ADBannerView *)banner{ NSLog(@"iAd received"); _iAdView.alpha=1.0; _adMobView.alpha = 0.0; [UIView commitAnimations]; } -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ NSLog(@"iAd failed, AdMob received"); _iAdView.alpha=0.0; _adMobView.alpha=1.0; [UIView commitAnimations]; } 

Questo è tutto ciò che ti serve per implementare banner iAd e AdMob. Favorisce iAd e mostra un banner AdMob se la nostra app non riesce a ricevere un annuncio da iAd. Ho visto molte domande relative a ciò nelle ultime settimane, quindi ho letteralmente commentato il più ansible per aiutare tutti a capire cosa sta succedendo esattamente qui.

 // Import iAd and AdMob in your header file #import "ViewController.h" // Enter YOUR ad id you receive from AdMob here #define BANNER_UNIT_ID @"yourAdMobBannerID" @interface ViewController () @end @implementation ViewController { //We will put these here so we can access them globally GADBannerView *adMobView; ADBannerView *iAdView; CGRect screenBounds; } - (void)viewDidLoad { [super viewDidLoad]; // Get device screen size // For example, screenBounds on an iPhone 6 will look like this // screenBounds.origin.x == 0 // screenBounds.origin.y == 0 // screenBounds.size.width == 375 // screenBounds.size.height == 667 screenBounds = [[UIScreen mainScreen] bounds]; // Setup iAd view // Create the AdBannerView iAdView = [[ADBannerView alloc] initWithFrame:CGRectZero]; // Set its delegate iAdView.delegate=self; // This sets the frame origin at (0,0) which would be the top left of the device screen // iAdView.bounds.size.width and iAdView.bounds.size.height sets the size of the AdBannerView [iAdView setFrame:CGRectMake(0, 0, iAdView.bounds.size.width, iAdView.bounds.size.height)]; // This will take the center of our AdBannerView and move it to a point (x,y) // We want our AdBannerView.center in the center of the device screen // So lets get the width of our screen and divide it by 2. We do this with screenBounds.size.width / 2 // We also want our AdBannerView to be at the bottom of the screen // So lets get the height of our screen with screenBounds.size.height // Remember were talking about the center of our AdBannerView here so if we just set it to that // Half of our AdBannerView's height will be cut off by the bottom of the screen // So lets subtract half of our AdBannerView's height to fix that with iAdView.bounds.size.height / 2 iAdView.center = CGPointMake(screenBounds.size.width / 2, screenBounds.size.height - (iAdView.bounds.size.height / 2)); // Add it to our view [self.view addSubview:iAdView]; // Our AdBannerView is now at the bottom of our devices screen // But it takes a second to receive an ad from iAd's network so lets make it transparent for now iAdView.alpha = 0.0; // Setup AdMob view // Create the GADBannerView adMobView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; // Use the BANNER_UNIT_ID we defined earlier adMobView.adUnitID = BANNER_UNIT_ID; adMobView.rootViewController = self; [adMobView loadRequest:[GADRequest request]]; // This sets the frame origin at (0,0) which would be the top left of the device screen // adMobView.bounds.size.width and adMobView.bounds.size.height sets the size of the GADBannerView [adMobView setFrame:CGRectMake(0, 0, adMobView.bounds.size.width, adMobView.bounds.size.height)]; // This will take the center of our GADBannerView and move it to a point (x,y) // We want our GADBannerView.center in the center of the device screen // So lets get the width of our screen and divide it by 2. We do this with screenBounds.size.width / 2 // We also want our GADBannerView to be at the bottom of the screen // So lets get the height of our screen with screenBounds.size.height // Remember were talking about the center of our GADBannerView here so if we just set it to that // Half of our GADBannerView's height will be cut off by the bottom of the screen // So lets subtract half of our GADBannerView's height to fix that with adMobView.bounds.size.height / 2 adMobView.center = CGPointMake(screenBounds.size.width / 2, screenBounds.size.height - (adMobView.bounds.size.height / 2)); // Add it to our view [self.view addSubview:adMobView]; // We don't have to set the alpha of GADBannerView to 0.0 because it is automatically transparent if no ad is available } //iAd methods -(void)bannerViewDidLoadAd:(ADBannerView *)banner { NSLog(@"iAd received ad"); // We received an ad from iAd so lets show it // We will animate the transition of its alpha from 0.0 to 1.0 // Also lets animate our GADBannerView from 1.0 to 0.0 to hide it [UIView beginAnimations:nil context:NULL]; iAdView.alpha = 1.0; adMobView.alpha = 0.0; [UIView commitAnimations]; } -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { NSLog(@"iAd failed"); // We failed to receive an ad from iAd so lets hide it // We will animate the transition of its alpha from 1.0 to 0.0 // Also lets animate our GADBannerView from 0.0 to 1.0 to show it // AdMob has near a 100% fill rate so the chances of there being an ad are almost certain [UIView beginAnimations:nil context:NULL]; iAdView.alpha = 0.0; adMobView.alpha = 1.0; [UIView commitAnimations]; } 

Per avere gli annunci nella parte superiore dello schermo, abbiamo bisogno di cambiare i CGPoint che stiamo assegnando ai nostri centri di visualizzazione annunci.

 // This will take the center of our AdBannerView and move it to a point (x,y) // We want our AdBannerView.center in the center of the device screen // So lets get the width of our screen and divide it by 2. We do this with screenBounds.size.width / 2 // We also want our AdBannerView to be at the top of the screen // So lets get the origin of our screen with screenBounds.origin.y // Remember were talking about the center of our AdBannerView here so if we just set it to that // Half of our AdBannerView's height will be cut off by the top of the screen // So lets add half of our AdBannerView's height to fix that with iAdView.bounds.size.height / 2 iAdView.center = CGPointMake(screenBounds.size.width / 2, screenBounds.origin.y + (iAdView.bounds.size.height / 2)); // This will take the center of our GADBannerView and move it to a point (x,y) // We want our GADBannerView.center in the center of the device screen // So lets get the width of our screen and divide it by 2. We do this with screenBounds.size.width / 2 // We also want our GADBannerView to be at the top of the screen // So lets get the origin of our screen with screenBounds.origin.y // Remember were talking about the center of our GADBannerView here so if we just set it to that // Half of our GADBannerView's height will be cut off by the top of the screen // So lets add half of our GADBannerView's height to fix that with adMobView.bounds.size.height / 2 adMobView.center = CGPointMake(screenBounds.size.width / 2, screenBounds.origin.y + (adMobView.bounds.size.height / 2));