Как скрыть баннеры 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.