Когда мое приложение запускается впервые, iAd отказывается загружать рекламу на первом экране - PullRequest
1 голос
/ 07 мая 2011

Когда мое приложение запускается, iAd отказывается загружать рекламу на первом экране.Нет сообщения об ошибке, ничего.Если я переключаю экраны (переходя на другой экран), он начинает получать рекламу и показывать ее, даже когда я возвращаюсь к первому экрану.

Я использую один экземпляр iAd, который находится в ApplicationDelegate.Я пытаюсь связать в iAdBanner в viewDidAppear и отсоединить в viewWillDisappear.

Метод viewDidAppear:

- (void)viewDidAppear:(BOOL)animated
{
    NSLog(@"view did appear");
    [super viewDidAppear:animated];

    ADBannerView *adBanner = SharedAdBannerView;

    adBanner.requiredContentSizeIdentifiers = (&ADBannerContentSizeIdentifierPortrait != nil) ?
    [NSSet setWithObjects:ADBannerContentSizeIdentifierPortrait, ADBannerContentSizeIdentifierLandscape, nil] : 
    [NSSet setWithObjects:ADBannerContentSizeIdentifier320x50, ADBannerContentSizeIdentifier480x32, nil];


    [self.view addSubview:adBanner];
    // set the delegate to self, so that we are notified of ad responses
    [adBanner setDelegate:self];
    isAdShown = [adBanner isBannerLoaded];
    [self layoutForCurrentOrientation:animated];
}

Метод макета:

- (void)layoutForCurrentOrientation:(BOOL)animated
{
    //TODO: this only handles bottom-located elements


    ADBannerView *adBanner = SharedAdBannerView;

    CGFloat animationDuration = animated ? 0.2f : 0.0f;
    // by default content consumes the entire view area
    CGRect contentFrame = contentView.bounds;
    CGRect owningViewFrame = [self view].bounds;
    // the banner still needs to be adjusted further, but this is a reasonable starting point
    // the y value will need to be adjusted by the banner height to get the final position
    CGPoint bannerOrigin = CGPointMake(CGRectGetMinX(owningViewFrame), CGRectGetMaxY(owningViewFrame));
    CGFloat bannerHeight = 0.0f;

    // First, setup the banner's content size and adjustment based on the current orientation
    if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
        adBanner.currentContentSizeIdentifier = (&ADBannerContentSizeIdentifierLandscape != nil) ? ADBannerContentSizeIdentifierLandscape : ADBannerContentSizeIdentifier480x32;
    else
        adBanner.currentContentSizeIdentifier = (&ADBannerContentSizeIdentifierPortrait != nil) ? ADBannerContentSizeIdentifierPortrait : ADBannerContentSizeIdentifier320x50; 
    bannerHeight = adBanner.bounds.size.height;

    // Depending on if the banner has been loaded, we adjust the content frame and banner location
    // to accomodate the ad being on or off screen.
    // This layout is for an ad at the bottom of the view.
    if (isAdShown)
    {
        NSLog(@"Banner is loaded");
        contentFrame.size.height = owningViewFrame.size.height - bannerHeight;
        bannerOrigin.y -= bannerHeight;
    }
    else
    {
        NSLog(@"Banner is not loaded");
        bannerOrigin.y += bannerHeight;
        contentFrame.size.height = owningViewFrame.size.height;
    }
    NSLog(@"Banner content Frame: (%f, %f), (%f, %f)", bannerOrigin.x, bannerOrigin.y, contentFrame.size.width, contentFrame.size.height);
    // And finally animate the changes, running layout for the content view if required.
    [UIView animateWithDuration:animationDuration
                     animations:^{
                         contentView.frame = contentFrame;
                         [contentView layoutIfNeeded];
                         adBanner.frame = CGRectMake(bannerOrigin.x, bannerOrigin.y, adBanner.frame.size.width, adBanner.frame.size.height);
                     }];
}

иМетод viewWillDisappear:

-(void)viewWillDisappear:(BOOL)animated
{
    NSLog(@"View will disappear");
    [super viewWillDisappear:animated];
    [self removeLinkToAdBanner:animated];
}
-(void)removeLinkToAdBanner:(BOOL)animated
{
    ADBannerView *adBanner = SharedAdBannerView;
    if ([adBanner delegate] == self) {
        adBanner.delegate = nil;
        [adBanner removeFromSuperview];
    }
}

Реальным разочарованием было то, что это работало в симуляторе до того, как я обновился до xcode 4. Я обновился, и внезапно он перестал работать.Кто-нибудь еще видел такое поведение?Любые идеи, что я могу сделать, чтобы это исправить?Такое поведение происходит в симуляторе на всех тестовых версиях 4.x (4.0 - 4.3).

1 Ответ

2 голосов
/ 04 ноября 2011

Я столкнулся с той же проблемой, и это исправление находится в методе bannerViewDidLoadAd AppDelegate.Вам нужно вызвать свой метод showBanner, чтобы объявление показывалось изначально.

- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
     [_currentController showBannerView:_bannerView animated:YES];
}

Пожалуйста, проверьте новые примеры кода iAdSuite, где я их вынул.

Пример iAdSuiteКод обновлен 10/31/11

...