didFailToReceiveAdWithError不适用于iOS 8模拟器
我的iAd / AdMob中介适用于所有iOS 7模拟器和设备。 但是,iOS 8 didFailToReceiveAdWithError方法不适用于任何模拟器,但适用于iOS 8设备。 问题是我没有iPhone 6/6 +设备来testing。 所以我在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]; }
我甚至不知道didFailToReceive坐标是否正确,因为我没有办法testing。 我不明白为什么didFailToReceiveAdWithError永远不会被iOS 8模拟器调用? 这是一个iOS 8模拟器错误,或者有什么我可以做的,以解决这个问题?
//忽略^^
-(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]; }
这是实施iAd和AdMob横幅所需的一切。 如果我们的应用程序无法从iAd接收广告,则它支持iAd并显示AdMob横幅广告。 在过去的几个星期里,我看到很多关于这个问题的问题,所以我尽我所能地帮助大家理解这里究竟发生了什么。
// 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]; }
要在屏幕顶部显示广告,我们需要更改我们分配给广告查看中心的CGPoint。
// 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));