2010-11-11 1 views
15

Я добавил ADBannerView к виду, и когда я загрузить приложение я получаю следующее сообщение:Это проблема, когда iAd может быть скрыт?

ADBannerView: ПРЕДУПРЕЖДЕНИЕ вида баннера (0x7a023c0) имеет объявление, но может быть закрыто. Это сообщение печатается только один раз для каждого вида баннера.

Насколько я вижу, весь баннер виден на экране. Это действительно проблема? Или это только предупреждение, которое я могу игнорировать?

+0

Вы можете помочь мне на этом http://stackoverflow.com/questions/5953418/implementation-for-iad – ajay

+0

Я нашел это видео Youtube полезным. http://www.youtube.com/watch?v=hLpgL6K1vM4 – user961632

ответ

22

Как говорит Стивен Дарлингтон, это хорошая идея, чтобы выяснить, в чем дело. Простой способ перепроверить это в коде (от контроллера вида) будет:

 // bring your bannerView to the front 
    [self.view bringSubviewToFront:bannerView]; 

    // and make sure it's positioned onscreen. 
    bannerView.frame = CGRectMake(0.0, 0.0, bannerView.frame.size.width, bannerView.frame.size.height); 

Предполагая, что вы имели Ивар/IBOutlet к вашему AdBannerView называется bannerView, это будет заботиться о каких-либо проблемах позиционирования интерфейса строителя, и убедитесь, что bannerView не был охвачен ничем.

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

  1. Ваш AdBannerView будет пытаться загрузить рекламу, будь то на экране или нет.

  2. В зависимости от того, является ли он успешным, ваш AdBannerViewDelegate получит либо

    а) bannerViewDidLoadAd: (перейти к шагу 3) или

    б) bannerView: didFailToReceiveAdWithError: (AdBannerView попробует еще раз само по себе)

  3. В этот момент мяч находится в вашем суде относительно того, что делать с указанным баннерным изображением, если на самом деле оно загрузило объявление. Простой способ проверить это в коде - это вашBannerView.bannerLoaded, который вернет YES, если у него есть объявление, или НЕТ, если это не так. И так ...

  4. Как вы обрабатываете AdBannerView после того, как он успешно загрузил свое начальное объявление, определяет, как он будет себя вести в будущем. Вам не нужно сразу размещать его на экране - выберите время, которое имеет смысл в вашем приложении. Тем не менее, представление баннера, которое успешно загрузило объявление, НЕ будет пытаться загрузить другой, пока оно не появится на экране. (Имеет смысл, правда?) Трудная часть ...

    4b) вы также не получите новых сообщений делегата из этого bannerView, поэтому, если вы не перемещаете баннерное изображение на экране сразу после получения сообщения делегата bannerViewDidLoadAd, вам придется реализовать какую-то структуру управления на ваш собственный, чтобы обращаться, когда, если вообще, вы перемещаете его на экране, после чего он начнет запрашивать у рекламного сервера больше объявлений, и вы получите больше сообщений делегатов, и цикл начнется заново.

Итак, подведем итог: Это только проблема, если ваш ОВР затемняется, если вы хотите, чтобы служить больше МААШ и платят. Тем не менее, эффективная цена за тысячу показов была очень-очень низкой в ​​последнее время, так что, возможно, это не такая проблема в конце концов;)

2

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

Несколько проблем, которые я видел:

  • Рама ОВР немного от, возможно, с экрана всего на пиксел или два
  • Вы случайно создали два МААШ и один на экране, а другой скрыт за первый
+0

Я отключил автоматизацию в AdBannerView в XIB для каждого измерения, кроме расстояния от дна (мой баннер внизу экрана, и есть панель вкладок ниже Это). Кажется, это разрешило это для меня. – Oscar

1

У меня такая же проблема, но причина в том, что у меня есть панели уведомлений OpenFeint поверх этого, например. высокие баллы, достижения разблокированы и т. д. Он скользит, а затем скользит, не останавливается надолго, поэтому я не думаю, что это проблема.

Я поставил ADS сверху, тогда пользователь не увидит уведомления OpenFeint, это будет еще одна проблема, я не знаю, если это произойдет, если у вас есть ADS и OpenFeint в разных местах экрана, я не пробовал поскольку нижний экран моего приложения заполнен кнопками, поэтому доступен только верхний экран.

1

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

В делегат своего приложения, нажмите на эту функцию:

  • (аннулируются) применение: (UIApplication *) применение willChangeStatusBarFrame: (CGRect) newStatusBarFrame // Проверка newStatusBarFrame.size.height и анимировать кадр ОВР вверх или вниз соответственно.
1

Я получаю это сообщение, когда добавляю ADBannerView в UIScrollView. В этом случае объявление может быть закрыто.

7

Чтобы добавить к этой дискуссии, я получил это сообщение, когда я изменил свойство center, чтобы переместить объявление за пределы экрана. Я использую анимацию UIView для перемещения объявления на экран.

После некоторых экспериментов я выяснил, как это сделать, не вызывая появления сообщения. Хитрость заключалась в том, чтобы скрыть, чтобы присвоить свойству adBannerView.hidden значение YES в ожидании загрузки объявления. После того, как он был загружен, я просто должен был убедиться, чтобы установить скрытое свойство NO только после совершения анимации:

-(void) fadeAdIn:(UIView*)view 
{ 
    float offsetY = view.frame.size.height * (bannerOnBottom ? 1 : -1); 

    CGPoint pos = [self getBannerPosition]; 
    view.center = CGPointMake(pos.x, pos.y + offsetY); 

    [UIView beginAnimations:@"AdIn" context:nil]; 
    [UIView setAnimationDuration:1.0]; 
    view.center = pos; 
    [UIView commitAnimations]; 

    // must unhide AFTER animation has been committed to prevent "ad obstructed" 
    view.hidden = NO; 
} 
+0

Спасибо. Я начал натыкаться на стену на эту деталь, но просто перемещение _bannerView.hidden call вне блока анимации сделало трюк! –

1

Ответ от LearnCocos2D было решение для меня. Не уверен, что это особая проблема с Cocos2D (которую я использую). Моя проблема заключалась в том, что я использовал анимацию «нового» стиля с использованием блоков, которые Apple рекомендует использовать, animateWithDuration: delay: options: animations: completion: Когда я их использую, я получаю скрытое предупреждение. Я предполагаю, что проблема заключается в том, что представление частично скрыто во время его анимации, поэтому предупреждение, но вы не можете сделать его полностью видимым, прежде чем сделать анимацию, очевидно, если вы просто не хотите выскочить на экран, что является уродливым.

Это нормально, потому что переход к анимации стиля «старого» с использованием beginAnimations: и commitAnimations: устранил предупреждения для меня. Мне любопытно, если это предупреждение означает, что вы фактически упускаете доход от рекламы или это просто раздражает, но на самом деле не проблема.

0

У меня был такой код:

if (animate) 
{ 
    [UIView animateWithDuration:0.5 animations:^{ 
     self.adBannerView.frame = adBannerFrame; 
     self.otherViewFrame.frame = otherViewFrame; 
     } 
    ]; 
} 
else 
{ 
    self.adBannerView.frame = adBannerFrame; 
    self.otherViewFrame.frame = otherViewFrame; 
} 

и после некоторого экспериментирования, я обнаружил, что порядок инициализаций должно быть отменено в обоих, если и ноги либо еще.

self.otherViewFrame.frame = otherViewFrame; 
    self.adBannerView.frame = adBannerFrame; 

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

 Смежные вопросы

  • Нет связанных вопросов^_^