При скрытии рекламного баннера дальнейшая реклама не запрашивается и не показывается
У меня есть тестовое приложение с услугой AdMob Mediation, только на тестовом устройстве в данный момент. Я настроил все необходимые методы в соответствии с документацией. У меня возникла проблема, из-за которой при возникновении ошибки "Не получить объявление" больше не запрашиваются и не показываются объявления?
Заголовок:
#import <UIKit/UIKit.h>
#import "GADBannerViewDelegate.h"
@class GADBannerView, GADRequest;
@interface AdTestViewController : UIViewController
<GADBannerViewDelegate> {
GADBannerView *bannerView_;
}
@property (nonatomic, retain) GADBannerView *bannerView;
- (GADRequest *)createRequest;
@end
Имп Файл
#import "AdTestViewController.h"
#import "Constants.h"
#import "GADBannerView.h"
#import "GADRequest.h"
@implementation AdTestViewController
@synthesize bannerView = bannerView_;
- (void)viewDidLoad {
[super viewDidLoad];
// Create a view of the standard size at the top of the screen.
// Available AdSize constants are explained in GADAdSize.h.
//bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
// Initialize the banner at the bottom of the screen.
//CGPoint origin = CGPointMake(0.0,
// self.view.frame.size.height -
// CGSizeFromGADAdSize(kGADAdSizeBanner).height);
self.bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
//origin:origin];
self.bannerView.adUnitID = kAdMobPublisherID;
self.bannerView.delegate = self;
[self.bannerView setRootViewController:self];
[self.view addSubview:self.bannerView];
self.bannerView.center =
CGPointMake(self.view.center.x, self.bannerView.center.y);
[bannerView_ loadRequest:[self createRequest]];
bannerView_.backgroundColor = [UIColor blueColor];
// Make the request for a test ad. Put in an identifier for
// the simulator as well as any devices you want to receive test ads.
GADRequest *request = [GADRequest request];
request.testDevices = [NSArray arrayWithObjects:
@"4D047EB9-A3A7-441E-989E-C5437F05DB04",
@"YOUR_DEVICE_IDENTIFIER",
nil];
}
- (GADRequest *)createRequest {
GADRequest *request = [GADRequest request];
// Make the request for a test ad. Put in an identifier for the simulator as
// well as any devices you want to receive test ads.
request.testDevices = [NSArray arrayWithObjects:
@"4D047EB9-A3A7-441E-989E-C5437F05DB04",
@"YOUR_DEVICE_IDENTIFIER",
nil];
return request;
}
- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error;
{
NSLog(@"Error - did Fail to Receive an Ad");
bannerView_.hidden = YES;
}
- (void)adViewDidReceiveAd:(GADBannerView *)view;
{
NSLog(@"Ad Received");
bannerView_.hidden = NO;
}
@end
То, что я вижу в своих журналах: "Получено объявление" несколько раз, затем "Ошибка - не удалось получить объявление"... После того, как в этом журнале больше нет записей, похоже, что он перестает запрашивать? Тестирование только на симуляторе в данный момент.
Любые идеи, как решить эту проблему, или, возможно, альтернативный способ скрыть представление, когда появляется ошибка / нет рекламы?
5 ответов
Я нахожу то же самое - когда GADBannerView
скрыт, запросы больше не отправляются.
Одна вещь, которую я попытался успешно, это переместить GADBannerView
за кадром вместо того, чтобы скрывать это. Конечно, вы хотите сделать это только в результате didFailToReceiveAdWithError
, а затем переместите его обратно на экран, когда adViewDidReceiveAd
, У меня это работает, и пользователь видит приятную анимацию, когда реклама появляется и уходит, во многом как в iAd.
Короче говоря, код ниже поместит ваш GADBannerView
(здесь называется mAdBannerView
) либо внизу экрана, либо вне экрана, в зависимости от логического значения adIsLoaded
,
CGRect bannerFrame = mAdBannerView.frame;
bannerFrame.origin.y = self.view.bounds.size.height - (adIsLoaded * bannerFrame.size.height);
mAdBannerView.frame = bannerFrame;
У меня была такая же проблема, это работало для меня:
Не используйте свойство.hidden, чтобы скрыть рекламу AdMob. Просто установите альфа на 0 (невидимый) или 1 (видимый).
Итак, в вашем методе делегата GADBannerView...
-(void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error {
// Hide the ad banner.
[UIView animateWithDuration:0.5 animations:^{
self.myADBanner.alpha = 0.0;
}];
}
-(void)adViewDidReceiveAd:(GADBannerView *)bannerView {
//Show the ad banner.
[UIView animateWithDuration:0.5 animations:^{
self.myADBanner.alpha = 1.0;
}];
}
Что касается "После этого журнала больше нет записей, как будто он перестает запрашивать?"
Это происходит и со мной, когда я удаляю рекламу из иерархии просмотров. Однако запросы продолжаются, когда я добавляю объявление обратно в иерархию просмотра. Единственный раз, когда они не продолжались, это когда я использовал свойство.hidden.
Думаю, вам лучше просто скрыть bannerView_ со скрытым свойством.
- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error {
bannerView_.hidden = YES;
}
Конечно, вы должны помнить, чтобы установить hidden
вернуться к YES
когда объявление успешно получено.
В методе, который вызывается при возникновении ошибки, например
bannerView_.hidden = 1;
это будет скрывать вид, если есть ошибка, и, вероятно, будет автоматически отображаться, если объявление было получено без ошибок
Простое решение, установите bannerView_.hidden в true adView:didFailToReciewvwAdWithError
метод. И для получения представления используйте adViewDidReceiveAd
метод. Пример кода:
Это метод делегата ADmob:
- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error
{
bannerView_.hidden = YES;
}
- (void)adViewDidReceiveAd:(GADBannerView *)view
{
bannerView_.hidden = NO;
}