При скрытии рекламного баннера дальнейшая реклама не запрашивается и не показывается

У меня есть тестовое приложение с услугой 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;
}
Другие вопросы по тегам