Search code examples
iosobjective-crequestadmobgoogle-dfp

GADRequest request delegate does not always receive resposne


I am working on an iOS app that uses Google Ad SDK. The view controller that is supposed to display the ad is a delegate of GADBannerViewDelegate and GADSwipeableBannerViewDelegate.

The ad comes in just fine most of the time. Sometimes however, AdMob seems to hang and I don't get a response whatsoever in my delegate.

Is there something I have done wrong? Alternatively, is there a way to detect this behavior?

I initialize the ad banner and then in viewWillAppear I reload the ad (assuming it's not already loading). It usually works just fine but again, it sometimes doesn't.

Here is the relevant code:

UPDATE:: I changed the code but to no avail. Here is new code (got rid of previous two methods):

-(void)resetAdView:(UIViewController *)rootViewController {
    [self.adMob_ActivityIndicator startAnimating];
    if (adBanner_ == nil) {
        adBanner_ = [[DFPSwipeableBannerView alloc]
                     initWithFrame:CGRectMake(30, 365, 300, 150)];
    }    
    [adBanner_ setHidden:YES];
    if (isLoaded_) {
        GADRequest *request = [GADRequest request];
        [adBanner_ loadRequest:request];
        [self.scrollView addSubview:adBanner_];
    } else {
        adBanner_.delegate = self;
        adBanner_.rootViewController = rootViewController;
        adBanner_.adUnitID = AD_UNIT_ID;
        GADRequest *request = [GADRequest request];
        [adBanner_ loadRequest:request];
        [self.scrollView addSubview:adBanner_];
    }
}

My instance variables are :

DFPSwipeableBannerView *adBanner_; BOOL isLoaded_;


Solution

  • I ended up just wiping the banner view from the superview and completely re-initializing it and the request. This doesn't solve the problem of the hanging response but now if you switch to a different view and come back to this one, the ad does reload. It's possible that I was simply adding too many views into my scrollview which will not be the case anymore.

    -(void)resetAdView:(UIViewController *)rootViewController {
        // in reset method
        [self.adMob_ActivityIndicator startAnimating];
        adBanner_ = nil;
        for (UIView *subview in self.scrollView.subviews) {
            if (subview.tag == 666) {
                // removing banner view from superview
                [subview removeFromSuperview];
            }
        }
        // (re) initializing banner view
        adBanner_ = [[DFPSwipeableBannerView alloc]
                     initWithFrame:CGRectMake(30, 365, 300, 150)];
        [adBanner_ setHidden:YES];
        // setting up and requesting ad
        adBanner_.delegate = self;
        adBanner_.rootViewController = rootViewController;
        adBanner_.adUnitID = AD_UNIT_ID;
        GADRequest *request = [GADRequest request];
        [adBanner_ loadRequest:request];
        adBanner_.tag = 666;
        [self.scrollView addSubview:adBanner_];
    }