2010-11-11 16 views
15

que añade el ADBannerView a una vista y cuando cargo la aplicación Me sale el siguiente mensaje:¿Es un problema cuando un iAd puede quedar oculto?

ADBannerView: ADVERTENCIA Una vista del banner (0x7a023c0) tiene un anuncio, pero puede ser oscurecida. Este mensaje solo se imprime una vez por vista de pancarta.

Por lo que puedo ver, todo el banner está visible en la pantalla. ¿Es esto realmente un problema? ¿O es solo una advertencia que puedo ignorar?

+0

me pueden ayudar en este http://stackoverflow.com/questions/5953418/implementation-for-iad – ajay

+0

Encontré útil este video de Youtube. http://www.youtube.com/watch?v=hLpgL6K1vM4 – user961632

Respuesta

22

Como dice Stephen Darlington, que es una buena idea para averiguar cuál es el problema. Una manera fácil de volver a verificar esto en el código (de un controlador de vista) sería:

 // 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); 

Suponiendo que tenía una Ivar/IBOutlet a su AdBannerView llamada bannerView, esto se haría cargo de cualquier problema de posicionamiento constructor de interfaces, y asegúrese de que bannerView no esté cubierto por nada.

Desde mi experiencia, no pasa nada malo si el anuncio es fuera de la pantalla, sin embargo, el iAd no cargará anuncios nuevos hasta que sepa que está completamente en pantalla. Así, a medida que empiezan su aplicación,

  1. Su AdBannerView intentará cargar un anuncio, ya sea en pantalla o no.

  2. Dependiendo de si es o no es exitosa, su AdBannerViewDelegate recibirá ya sea

    a) bannerViewDidLoadAd: (continúe con el paso 3) o

    b) bannerView: didFailToReceiveAdWithError: (el AdBannerView lo intentará de nuevo por su cuenta)

  3. En ese momento, el balón está en su cancha sobre qué hacer con dicho bannerView, si de hecho cargó un anuncio. Una forma fácil de verificar esto en el código es yourBannerView.bannerLoaded, que devolverá SÍ si tiene un anuncio, o NO si no lo hace. Y así ...

  4. Cómo maneja AdBannerView después de que carga con éxito su anuncio inicial determina cómo se comportará en el futuro. No tiene que colocarlo en pantalla de inmediato: elija un momento que tenga sentido dentro de su aplicación. Sin embargo, una vista de pancarta que haya cargado correctamente un anuncio NO intentará cargar otra hasta que aparezca en la pantalla. (Tiene sentido, ¿no?) La parte difícil es ...

    4b) tampoco recibirá ningún nuevo mensaje de delegado de ese bannerView, por lo que si no mueve el bannerView en pantalla inmediatamente después de recibir el mensaje de delegado bannerViewDidLoadAd, tendrá que implementar algún tipo de estructura de control en la suya para manejar cuándo, si es que lo hace, la mueve a la pantalla, en ese momento comenzará a pedir más anuncios al servidor de anuncios, obtendrá más mensajes de delegado y el ciclo comenzará de nuevo.

Por lo tanto, para resumir: Es sólo un problema si su iAd es oscurecida si desea servir a más iAds y se les paga. Sin embargo, eCPM ha estado muy, muy bajo últimamente, así que tal vez eso no sea un problema después de todo;)

2

Al igual que las advertencias del compilador, creo que esto es algo que probablemente deba tratar de llegar al fondo incluso si no está causando problemas de inmediato. Si fuera Apple, enviaría mis anuncios a aplicaciones que realmente los mostraran (no digo que haga hacer esto), por lo que podría haber un aspecto financiero también.

Un par de problemas que he visto:

  • El marco iAd es un poco fuera, tal vez fuera de la pantalla con sólo un pixel o dos
  • Usted ha creado accidentalmente dos iAds y uno es en la pantalla y el otro está oculto detrás de la primera
+0

Apagué el autosizing en AdBannerView en el XIB para cada dimensión, excepto la distancia desde la parte inferior (mi banner está en la parte inferior de la pantalla, y hay una barra de pestañas debajo eso). Esto parece haberlo resuelto por mí. – Oscar

1

Tengo el mismo problema, pero la razón es que tengo barras de notificación OpenFeint además de eso, p. puntajes altos, logro desbloqueado, etc. Se desliza hacia adentro y luego se desliza, no se queda por mucho tiempo, así que no creo que sea un problema.

Puse ADS en la parte superior, entonces el usuario no vería las notificaciones de OpenFeint, eso será otro problema, no sé si esto sucede si tiene ADS y OpenFeint en diferentes ubicaciones de la pantalla, no lo intenté ya que la pantalla inferior de mi aplicación está llena de botones, por lo que solo está disponible la parte superior de la pantalla.

1

Otra opción es escuchar los eventos de cambio de tamaño de la barra de estado y mover el iAd cuando eso sucede para que no se reposicione fuera de la pantalla (dando como resultado esa advertencia y anuncios no servidos).

En delegado de la aplicación, aprovechar esta función:

  • (void) aplicación: willChangeStatusBarFrame (UIApplication *) aplicación: (CGRect) newStatusBarFrame // Comprobar newStatusBarFrame.size.height y animar su marco iAd arriba o abajo en consecuencia.
1

Estoy obteniendo este mensaje cuando agrego un ADBannerView a un UIScrollView. En este caso, el anuncio puede estar oscurecido.

7

Para agregar a esta discusión, recibí este mensaje cuando modifiqué la propiedad center para mover el anuncio fuera de la pantalla. Uso animaciones UIView para deslizar el anuncio en la pantalla.

Después de experimentar un poco, descubrí cómo hacerlo sin hacer que aparezca el mensaje. El truco consistía en ocultar para establecer la propiedad adBannerView.hidden en SÍ mientras esperaba a que se cargara el anuncio. Una vez que se ha cargado, sólo tenía que asegurarse de establecer la propiedad oculta en NO solamente después de cometer la animación:

-(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

Gracias. Estaba empezando a golpear mi cabeza contra la pared en este detalle, pero simplemente moviendo la llamada _bannerView.hidden fuera del bloque de animación hizo el truco! –

1

La respuesta de LearnCocos2D era la solución para mí. No estoy seguro si este es un problema específico con Cocos2D (que estoy usando). Mi problema era que estaba usando las animaciones de estilo "nuevo" usando bloques que Apple recomienda usar, animateWithDuration: delay: options: animations: completion: Cuando los uso, obtengo la advertencia oscurecida. Supongo que el problema es que la vista se oscurece parcialmente mientras se está animando, de ahí la advertencia, pero no se puede hacer completamente visible antes de que se termine de animar, obviamente, a menos que solo quieras abrirlo en la pantalla, lo cual es feo.

Eso está bien, porque volviendo a la animación de estilo "anterior" con beginAnimations: y commitAnimations: eliminó las advertencias para mí. Tengo curiosidad por saber si esta advertencia significa que en realidad se está perdiendo ingresos por publicidad o si simplemente es molesto, pero en realidad no es un problema.

0

tuve código como este:

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

y después de algunos experimentos, he encontrado que el orden de las inicializaciones debe invertirse en ambos si las piernas y demás.

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

Así que la idea no era dejar que otra vista cubrir el AdBannerView, incluso por unos pocos microsegundos.

Cuestiones relacionadas