Как скрыть баннеры iAd, когда реклама не показывается?

Кто-нибудь может предложить небольшую помощь по этому вопросу? Я только что получил отзыв от Apple, в котором сообщалось, что мое приложение не может быть принято, потому что оно содержит рекламные баннеры, которые все еще были видны, когда реклама не обслуживалась, но проблема в том, что я не могу понять, что делать, чтобы предотвратить эту проблему.

[QUOTE]

Мы завершили рассмотрение вашей заявки; однако мы не можем опубликовать эту версию в App Store, поскольку она отображает пустой баннер iAd, когда содержание рекламы недоступно. Баннер в приложении должен быть скрыт всякий раз, когда iAd не обслуживает рекламный контент. Мы включили дополнительную информацию ниже, чтобы помочь объяснить проблему. Мы надеемся, что вы рассмотрите возможность пересмотра и повторной подачи заявки.

Чтобы справиться со случаем, когда рекламный контент недоступен, вам необходимо реализовать делегат для просмотра баннера. Пример кода приведен здесь для вашего удобства. Кроме того, вы можете ознакомиться с разделом "Работа с представлениями баннеров" Руководства по программированию iAd для получения более подробной информации: https://developer.apple.com/iphone/prerelease/library/documentation/UserExperience/Conceptual/iAd_Guide/WorkingwithBannerViews/WorkingwithBannerViews.html

Представление баннера Делегат, чтобы удалить представление баннера, когда реклама недоступна:

 - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
 {
  if (self.bannerIsVisible)
   {
       [UIView beginAnimations:@"animateAdBannerOff" context:NULL];
 // assumes the banner view is at the top of the screen.
       banner.frame = CGRectOffset(banner.frame, 0, -50);
       [UIView commitAnimations];
       self.bannerIsVisible = NO;
   }
 }

Теперь я борюсь с тем, что делать с этим кодом, когда я пытался вставить его, он просто выдает несколько красных ошибок, поэтому я прихожу за советом, кто-нибудь, кто сможет мне здесь помочь?

РЕДАКТИРОВАТЬ: Основной код контроллера контроллера по запросу автора

    //
//  MainViewController.m
//  GBSoundboard4
//
//  Created by David Clarke on 19/06/2010.
//  Copyright __MyCompanyName__ 2010. All rights reserved.
//

#import "MainViewController.h"
#import <AVFoundation/AVAudioPlayer.h>

@implementation MainViewController
-(IBAction)goodafternoon {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"goodafternoon" ofType:@"wav"];
    AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    [theAudio play];
}

-(IBAction)jollygood {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"jollygood" ofType:@"wav"];
    AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    [theAudio play];
}
-(IBAction)playSound {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"goodmorning" ofType:@"wav"];
    AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];

    [theAudio play];
}

-(IBAction)upgrade {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/gb/app/the-great-british-soundboard/id376263018?mt=8"]];
}



/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
}
*/


- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller {

    [self dismissModalViewControllerAnimated:YES];
}


- (IBAction)showInfo:(id)sender {    

    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    controller.delegate = self;

    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];

    [controller release];
}


- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use.
}


- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/


- (void)dealloc {
    [super dealloc];
}


@end

3 ответа

Решение

Существует отличный пример того, как реализовать это в видео сеанса WWDC 2010 112. Если вы зарегистрированы в программе для разработчиков iPhone, вы можете загрузить ее из iTunes University, как описано ниже.

Предполагая, что вы участвуете в Программе разработчиков Apple, вы получили электронное письмо под названием "WWDC для всех". Перейдите по ссылкам в этом письме, пока не попадете в iTunes University. Затем перейдите по ссылке для фреймворков и выберите сессию 112. Я думаю, что реализация занимает примерно 25 минут.

Что вам нужно сделать, это событие - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)

Сделайте так, чтобы ваш вид с bannerView закрывал баннер, изменяя его рамку, чтобы покрыть пространство bannerView на вашем экране и переместить начало кадра bannerView за пределы экрана.

B затем на - (void)bannerViewDidLoadAd:(ADBannerView *) баннер

измените размер своего представления, чтобы освободить место для BannerView, и переместите начало кадра bannerView обратно в пространство на экране.

Вы должны сделать именно то, что они описывают. Во-первых, вам нужно сделать свой MainViewController делегатом для вашего экземпляра ADBannerView. Затем просто скопируйте и вставьте полученный код в реализацию вашего MainViewController. Это предполагает, что ваш баннер появляется в нижней части экрана. Если он появляется сверху, измените направление анимации в предоставленном ими коде.

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

Как они предполагают, это описано в соответствующем разделе Руководства по программированию iAd.

Другие вопросы по тегам