iOS Interstitial iAd не закрывается

у меня iAd-интеграция работает некорректно. Я пытался внедрить полноэкранную рекламу. Объявление появляется, но когда я нажимаю кнопку "X", чтобы закрыть его, оно не закрывается.

Может быть, вы можете найти проблему в моем коде? Я не знаю, что изменить, и потратил много времени на решение проблемы, но безуспешно.

ОБНОВЛЕНИЕ

он работает с [interstitial presentFromViewController:self];, но не с [interstitial presentInView:self.view];. Проблема в том, что presentFromViewController устарел в iOS 7... так как мне его изменить?


- (void)viewDidLoad
    {
        requestingAd = NO;
        [self showFullScreenAd];

    }

//Interstitial iAd
    -(void)showFullScreenAd {
        //Check if already requesting ad
        if (requestingAd == NO) {
            interstitial = [[ADInterstitialAd alloc] init];
            interstitial.delegate = self;
            self.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual;
            [self requestInterstitialAdPresentation];
            NSLog(@"interstitialAdREQUEST");
            requestingAd = YES;
        }//end if
    }

    -(void)interstitialAd:(ADInterstitialAd *)interstitialAd didFailWithError:(NSError *)error {
        interstitial = nil;
        requestingAd = NO;
        NSLog(@"interstitialAd didFailWithERROR");
        NSLog(@"%@", error);
    }

    -(void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd {
        NSLog(@"interstitialAdDidLOAD");
        if (interstitialAd != nil && interstitial != nil && requestingAd == YES) {
    [interstitial presentInView:self.view];
            NSLog(@"interstitialAdDidPRESENT");
        }//end if
    }

    -(void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd {
        interstitial = nil;
        requestingAd = NO;
        NSLog(@"interstitialAdDidUNLOAD");
    }

    -(void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd {
        interstitial = nil;
        requestingAd = NO;
        NSLog(@"interstitialAdDidFINISH");
    }

Заранее спасибо :)


person user3430458    schedule 17.03.2014    source источник


Ответы (2)


Лучшим решением этой проблемы для меня было заменить [interstitial presentInView:self.view]; на [_interstitialAd presentInView:_adPlaceholderView];, где _adPlaceholderView — это просмотр с теми же границами, что и self.view, и добавить непосредственно перед показом рекламы. И не забудьте удалить этот вид после того, как реклама была закончена.

Готовые методы будут выглядеть так:

-(void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd
{
    if ((interstitialAd != nil) && (_interstitialAd != nil) && (_requestingAd))
    {
        _adPlaceholderView = [[UIView alloc] initWithFrame:self.view.bounds];
        [self.view addSubview:_adPlaceholderView];
        [_interstitialAd presentInView:_adPlaceholderView];
    }
}

-(void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd
{
    _interstitialAd = nil;
    _requestingAd = NO;
    [_adPlaceholderView removeFromSuperview];
    _adPlaceholderView = nil;
}

Я надеюсь, что это поможет и вам.

person alokard    schedule 15.05.2014
comment
Не забудьте позвонить release. - person Little Endian; 07.07.2014
comment
Не забудьте использовать ARC в 2014 году. - person gzfrancisco; 04.02.2015

Я была такая же проблема. Не уверен, что вы уже поняли это, но на самом деле нет необходимости представлять InView.

Все, что вам нужно, это позвонить [self requestInterstitialAdPresentation]. ОДНАКО... если объявление не загружено, оно не будет отображаться в представлении и не выдаст вам журнал или предупреждение, подобное старому API iAd.

Мой лучший совет: перед загрузкой представления из любого места, где вы вызываете контроллер представления для загрузки, вы устанавливаете политику представления. Другой мой совет — вызвать [UIView prepareInterstitialAds] в AppDelegate. Это повышает вероятность того, что реклама будет загружена до того, как вы запросите рекламу.

Надеюсь, это поможет. Удачи.

person RobMillerJ25    schedule 01.04.2014
comment
Это не правильно. Метод класса prepareInterstitialAds — это метод класса UIViewController:разработчик. apple.com/library/iOs/documentation/iAd/Reference/ - person Danny S; 23.09.2014
comment
Я забыл контроллер после UIView, но это не неправильно, я использую его в этом случае, и он отлично работает, заменив UIViewController именем используемого контроллера представления. - person RobMillerJ25; 25.09.2014
comment
Я не говорил, что использование метода неправильно. Я сказал, что это неправильный класс, в котором вы говорили, что это называется :) - person Danny S; 25.09.2014