iAds anuncios intersticiales en iPhone?

Mi desarrollador y yo habíamos intentado anteriormente cargar anuncios intersticiales en iPhone y iPad, pero solo logramos que esto funcione en el iPad.

Durante nuestras pruebas, descubrimos que los dispositivos intersticiales no eran compatibles con iPhone, pero desde el lanzamiento de iOS7 algunas personas dicen que esto es posible.

Sin embargo, no puedo encontrar ninguna documentación decente sobre esto. Esta pregunta de Stack me hizo preguntarme de nuevo a través de iAd y Admob Integración intersticial en iPhone

Entonces, ¿son posibles los intersticiales de pantalla completa en iPhone usando iAds?

También he estado esperando anuncios intersticiales para iPhone desde iAd. Finalmente lo tengo implementado en una de mis aplicaciones y se está ejecutando y mostrando anuncios de prueba muy bien. La aplicación está actualmente en revisión y actualizaré mi respuesta una vez que se apruebe y puedo probar si se están publicando anuncios reales. Mientras tanto, aquí está el código que utilicé para implementar los intersticiales de iAd:

ViewController.h

@interface ViewController : UIViewController  { ADInterstitialAd *interstitial; BOOL requestingAd; } -(void)showFullScreenAd; 

ViewController.m

 -(void)viewDidLoad { requestingAd = NO; } // Interstitial iAd -(void)showFullScreenAd { // Check if already requesting ad if (requestingAd == NO) { [ADInterstitialAd release]; interstitial = [[ADInterstitialAd alloc] init]; interstitial.delegate = self; self.interstitialPresentationPolicy = ADInterstitialPresentationPolicyManual; [self requestInterstitialAdPresentation]; NSLog(@"interstitialAdREQUEST"); requestingAd = YES; } } -(void)interstitialAd:(ADInterstitialAd *)interstitialAd didFailWithError:(NSError *)error { interstitial = nil; [interstitialAd release]; [ADInterstitialAd release]; requestingAd = NO; NSLog(@"interstitialAd didFailWithERROR"); NSLog(@"%@", error); } -(void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd { NSLog(@"interstitialAdDidLOAD"); if (interstitialAd != nil && interstitial != nil && requestingAd == YES) { [interstitial presentFromViewController:self]; NSLog(@"interstitialAdDidPRESENT"); } } -(void)interstitialAdDidUnload:(ADInterstitialAd *)interstitialAd { interstitial = nil; [interstitialAd release]; [ADInterstitialAd release]; requestingAd = NO; NSLog(@"interstitialAdDidUNLOAD"); } -(void)interstitialAdActionDidFinish:(ADInterstitialAd *)interstitialAd { interstitial = nil; [interstitialAd release]; [ADInterstitialAd release]; requestingAd = NO; NSLog(@"interstitialAdDidFINISH"); } 

Simplemente llamo -(void)showFullScreenAd después de que el usuario realiza una determinada acción. Para obtener más información, consulte UIViewController iAd Additions Reference

EDITAR: 01/03/14 La actualización de la aplicación fue aprobada y ha estado en funcionamiento durante 12 horas. Todavía no he recibido ningún iAd intersticial a partir de este momento. Puede deberse a la falta de inventario para anuncios intersticiales en iPhone o puede tener algo que ver con el siguiente mensaje que he recibido en mi módulo iAd en iTunes Connect. El mensaje dice

Cuando envíe su aplicación, [nombre de la aplicación], para su aprobación, también será revisada por iAd para su uso en la red de la aplicación para determinar si es apropiada para recibir anuncios de los anunciantes de iAd. Una vez que se apruebe su aplicación, estará listo para comenzar a generar ingresos para los anuncios que se ejecutan en su aplicación.

Nunca recibí este mensaje antes, generalmente recibo el mensaje “Su aplicación ahora es apta para recibir anuncios” tan pronto como se lanza la actualización en la App Store. Es debido a la nueva implementación de anuncios intersticiales en mi aplicación o Apple ha actualizado algunos de sus procedimientos de iAd.

Actualizaré la respuesta nuevamente si y cuando empiezo a recibir iAds intersticiales. Mientras tanto, puedes probarlo tú mismo en mi aplicación + Cotizaciones . El código anterior se invoca y debe mostrarse un anuncio intersticial una vez que el usuario lo comparte a través de Facebook dentro de la aplicación.

EDITAR: 07/01/14 Contacté con iAd directamente y recibí una respuesta hoy

Hola Daniel, las tasas de cobertura iniciales reflejarán el lanzamiento reciente de intersticiales en iOS 7. Gracias por su paciencia mientras aumentamos la publicación de anuncios. Si aún no lo hizo, le recomendamos que integre pancartas iAd estándar vertical y horizontal en su aplicación para aprovechar todos los tipos de inventario publicitario disponibles. Finalmente, para referencia futura, cuando envíe su aplicación para su aprobación, también será revisada por iAd para determinar si es apropiada para recibir anuncios de los anunciantes de iAd. Por lo tanto, su nueva aplicación habilitada para iAd puede tardar unos días en comenzar a recibir impresiones de anuncios. Atentamente, Network Soporte de la red de aplicaciones de iAd

Por lo tanto, los iAds intersticiales para iPhone sí funcionan con iOS 7.0 y superior, pero actualmente tienen una baja tasa de relleno.

Mi respuesta original está empezando a envejecer, así que aquí hay una implementación Swift más nueva:

Esta implementación utiliza una Manual ADInterstitialPresentationPolicy para que podamos presentar nuestros intersticiales en nuestros propios intervalos. Al presentar manualmente su intersticial, no se carga con su propio botón de cierre para desactivarse. Entonces, lo que hice fue creado un UIView para presentar el intersticial y usé los métodos de delegado intersticial para descartar el UIView . La incoherencia con la recepción de un anuncio de la red iAd aún surge cuando se prueba. En ocasiones, recibe un anuncio, a veces no lo carga, lo que nos permite solicitar un nuevo anuncio y, a veces, no sucede nada. Esto parece ser la naturaleza de los intersticiales de iAd.

 import UIKit import iAd // Import iAd class ViewController: UIViewController, ADInterstitialAdDelegate { // Include the delegate var iAdInterstitial = ADInterstitialAd() // Our ad var iAdInterstitialView = UIView() // View to present our ad in var adLoaded = false // Bool to keep track if an ad is loaded or not override func viewDidLoad() { super.viewDidLoad() setupAd() } func setupAd() { // Set presentation to manual so we can choose when to present the interstitial // Setting this will also fetch an interstitial ad for us self.interstitialPresentationPolicy = ADInterstitialPresentationPolicy.Manual iAdInterstitial.delegate = self // Set the delegate // Make our view the same size as the view we will be presenting in iAdInterstitialView.frame = self.view.bounds } func requestNewAd() { // This will fetch an ad for us ViewController.prepareInterstitialAds() println("Requesting new ad") } @IBAction func presentAdButton(sender: AnyObject) { if (adLoaded) { // We have an ad that is loaded so lets present it self.view.addSubview(iAdInterstitialView) iAdInterstitial.presentInView(iAdInterstitialView) } else { // No ad has been loaded println("Ad not loaded") } } func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) { // Kinda works as expected // Sometimes is called prematurely // Sometimes takes minutes after ad is dismissed to be called println("interstitialAdDidUnload") // Get new ad adLoaded = false iAdInterstitialView.removeFromSuperview() requestNewAd() } func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) { // Failed to load ad so lets try again println("didFailWithError: \(error)") requestNewAd() } func interstitialAdWillLoad(interstitialAd: ADInterstitialAd!) { // There is an ad and it has begun to download println("interstitialAdWillLoad") } func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) { // We got an ad println("interstitialAdDidLoad") adLoaded = true } func interstitialAdActionShouldBegin(interstitialAd: ADInterstitialAd!, willLeaveApplication willLeave: Bool) -> Bool { println("interstitialAdActionShouldBegin") return true; } func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) { // Done with this ad. Lets get a new one println("interstitialAdActionDidFinish") iAdInterstitialView.removeFromSuperview() adLoaded = false requestNewAd() }