[Christmas Mobile Apps Sessions] Material de “Publicación de Universal Apps”

DownloadEl evento

El pasado Miércoles 10 de Diciembre tenía lugar el cuarto webcast de las Christmas Mobile Apps Sessiones. Las Christmas Mobile Apps Sessions son un conjunto 10 webcasts sobre desarrollo de apps móviles con variada  temática.

En esta sesión, vimos formas de monetización en aplicaciones universales viendo como crear Trials, In-App Purchase o como añadir publicidad, creamos el paquete de aplicación, publicamos en la tienda con diferentes opciones y finalmente vimos como añadir analíticas avanzadas.

El material

La presentación utilizada:

Podéis descargar el conjunto de ejemplos realizados en el webcast a continuación:

Por último, podéis ver en cualquier momento el webcast en el siguiente video:

Más información

[Windows Phone] Usando el nuevo control Ad Mediator

MoneyMonetización de aplicaciones

El desarrollar una aplicación móvil elegir su modelo de negocio es un punto vital. Los motivos por el cual como desarrollador decidimos publicar aplicaciones son muy variados:

  • Por amor al arte.
  • Por dinero.
  • Por aprender, etc.
  • Porque deseamos cubrir un hueco existente.
  • ¿Habíamos mencionado ya el dinero?

Hay muchos motivos. Un motivo habitual suele ser el obtener una ganacia económica por nuestro trabajo. Nuestras aplicaciones puede ser gratuitas y de pago. Además, nuestras aplicaciones de pago pueden contar con modo Trial (sumamente recomendado) e incluso tenemos disponible la opción de añadir In App Purchase.

Si deseamos obtener un beneficio económico parece obvio que debemos optar por aplicaciones de pago. Sin embargo, tenemos otras opciones interesantes para obtener beneficio económico como el uso de publicidad.

Actualmente en la Windows Phone Store, la publicidad representa aproximadamente la tercera parte de todos los ingresos generados por los desarrolladores.

El “problema” del uso de publicidad

Si nos decidimos a utilizar publicidad contamos con  varios SDKs de bastante calidad a la hora de generar publicidad y por lo tanto beneficios. Sin embargo, con todas las opciones nos preocuparemos por el eCPM (es el coste efectivo por cada mil impresiones, es decir, nuestros beneficios). Cada sistema cuenta con un valor diferente dependiendo de muchos factores como:

  • Categoría de anuncios elegidos
  • Mercado
  • El día y mes de la impresión
  • Etc

Bien, es un problema conocido y que los desarrolladores intentamos solucionar o al menos reducir el efecto al máximo.

¿Cómo?

Una de las soluciones habituales es utilizar distintas redes de publicidad para aumentar la disponibilidad de anuncios y asi los ingresos. En el momento en el que una red de anuncios no es capaz de mostrar un anuncio u otra red aporta un beneficio superior,  la aplicacion pasa a utilizar una segunda red y asi sucesivamente.

Ad Mediation

El proceso descrito anteriormente es un proceso más o menos complejo y sacado a base de pruebas y experiencia. Recientemente Microsoft ha anunciado Windows ad mediation, un sistema de mediación de anuncios que nos permite utilizar múltiples SDKs. El algoritmo utilizará un sistema de anuncios, si no es capaz de servir ningun anuncio, se llamará a un segundo sistema, luego a un tercero y asi sucesivamente. Basicamente, nos permite aumentar nuestro rendimiento a la hora de obtener beneficios mediante publicidad de una forma muy sencilla.

NOTA: El uso de Ad Mediator no nos garantizará que tendremos publicidad en el 100% de las situaciones. Nos garantiza que si un proveedor de publicidad no cuenta con anuncios se utilizará otro diferente.

Entre las características principales contamos con:

  • Podemos realizar una configuración a nivel global e incluso a nivel local en ciertos mercados.
  • Control sobre la tasa de refresco de la publicidad.
  • Podemos pausar y reanudar la publicidad.
  • Podemos elegir la prioridad de cada red de publicidad.
  • Podemos excluir redes de publicidad.

Windows Ad Mediation esta ya disponible para usar en Windows Phone 8.0, Windows Phone 8.1 Silverlight y aplicaciones universales XAML y los sistemas de publicidad soportados en estos momentos son:

NOTA: En Windows XAML los servicios AdMob, MobFox, InMobi y Inneractive no estan soportados.

En este artículo vamos a utilizar Windows Ad Mediator en una aplicación Universal realizando la integración paso a paso.

¿Te apuntas?

Usando el control Ad Mediator

Obtener la extensión Windows Ad Mediator

El primero paso que debemos llevar a cabo para utilizar Ad Mediator es descargar e instalar la extensión.

Windows Ad Mediator

Windows Ad Mediator

Descargar Ad Mediator

Descargar Ad Mediator

Nueva aplicación

Comenzamos creando un nuevo proyecto:

Nueva aplicación Windows Phone XAML

Nueva aplicación Windows Phone XAML

Añadir el control AdMediatorControl

En las referencias del proyecto hacemos clic derecho y elegimos la pestaña Extensiones dentro de Windows Phone 8.1:

Añadimos la referencia a la extensión

Añadimos la referencia a la extensión

Una vez añadida la referencia podemos arrastrar directamente el control AdMediatorControl en la vista de diseño en la vista o vistas deseadas.

Cuadro de herramientas

Cuadro de herramientas

<adMediator:AdMediatorControl x:Name="AdMediator_01B3E5" HorizontalAlignment="Left" Height="80" Id="AdMediator-Id-9A1E0E47-BE2F-41CC-A28B-0E14AD66165E" VerticalAlignment="Top" Width="480"/>

Tras arrastrar el control se generara en XAML un código similar al anterior. Como podemos ver se añade un nombre y un identificador único. Tanto el nombre como el identificador los utilizaremos a la hora de configurar Ad Mediator.

eL namespace XAML utilizado es el siguiente (App Windows Phone XAML):

xmlns:adMediator="using:Microsoft.AdMediator.WindowsPhone81"

Una vez añadido el control el siguiente paso sera configurarlo añadiendo los servicios de publicidad deseados.

Configuración del control AdMediatorControl

Una vez añadido el control AdMediatorControl es hora de configurarlo conectándolo a servicios conectados.

Hacemos clic derecho sobre el proyecto en el explorador de soluciones y seleccionamos la opción Nuevo  -> Servicio conectado.

Servicios conectados

Servicios conectados

Nos aparecerá la ventana de gestión de servicios conectados. Por defecto, las librerías de Microsoft Advertising se añaden por defecto.

NOTA: Si no deseamos utilizar Microsoft Advertising lo podemos eliminar sin problemas.

Para añadir otros proveedores de anuncios podemos pulsar el botón Seleccionar redes de anuncios:

Añadir nuevos servicios

Añadir nuevos servicios

Nos aparecerá una ventana donde podremos seleccionar cada una de las redes de anuncios disponibles para el tipo de proyecto en el que estemos trabajando.

Al añadir una nueva opción:

AdMediator 08

Referencias añadidas automáticamente

Todas las librerías necesarias para utilizar la red de anuncios seleccionada se añaden automáticamente al proyecto.

En este punto solo nos falta configurar cada red de anuncio añadida. Pulsamos el botón Configurar de la red de anuncios seleccionada.

Configurar red de anuncios

Configurar red de anuncios

 Añadir las capacidades necesarias

Segun el sistema de publicidad utilizado se necesitarán unas capacidades u otras. Podemos ver las capacidades requeridas por cada servicio de publicidad en la ventana de gestión de servicios. Para evitar excepciones al utilizar publicidad debemos añadir las capacidades requeridas en el archivo de manifiesto de la aplicación.

Capacidades de la App

Capacidades de la App

Gestión de excepciones no controladas desde la publicidad

Debemos asegurarnos de controlar las excepciones no controladas que nos puedan llegar desde las diferentes redes de anuncios:

// In App.xaml.cs file, register with the UnhandledException event handler.
UnhandledException += App_UnhandledException;
void App_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
      if (e != null)
      {
         Exception exception = e.Exception;
         if (exception is NullReferenceException && exception.ToString().ToUpper().Contains("SOMA"))
         {
            Debug.WriteLine("Handled Smaato null reference exception {0}", exception);
            e.Handled = true;
            return;
         }
      }

      // APP SPECIFIC HANDLING HERE

      if (Debugger.IsAttached)
      {
         // An unhandled exception has occurred; break into the debugger
         Debugger.Break();
      }
}

Otras opciones de configuración

Podemos especificar el tiempo en segundos (de 2 a 30 segundos) que Ad Mediator espera a la respuesta de una red de anuncios antes de pasar a la siguiente en caso de no tener respuesta válida. La gestión de timeouts es configurable. Por defecto, el tiempo de espera es de 5 segundos para todas las redes excepto Microsoft Advertising y Google AdMob que cuentan con 10 segundos por defecto.

Podemos especificar el tiempo de timeout de una red concreta facilmente:

AdMediatorControl.AdSdkTimeouts[AdSdkNames.MicrosoftAdvertising] = TimeSpan.FromSeconds(15);

Ad Mediator también nos facilita distintos eventos para gestionar cuando se producen eventos, errores, etc.:

AdMediator_Bottom.AdSdkError += AdMediator_Bottom_AdError;
AdMediator_Bottom.AdMediatorFilled += AdMediator_Bottom_AdFilled;
AdMediator_Bottom.AdMediatorError += AdMediator_Bottom_AdMediatorError;
AdMediator_Bottom.AdSdkEvent += AdMediator_Bottom_AdSdkEvent;

Testing

Probando la aplicación en el emulador se utilizarán una serie de metadatos de prueba que nos permite probar la aplicación aun sin configurar la red de anuncios. Los anuncios rotarán secuencialmente con una misma duración en ciclo. Nos permite verificar errores y eventos para garantizar que todo lo llevamos bien.

Tras asegurarnos, debemos probar en dispositivos físicos antes de publicar. En este caso debemos tener cada red de anuncio configurada y cada anuncio se mostrarás durante 60 segundos (podemos ajustar este parámetro al publicar). De nuevo, debemos asegurarnos que cada red de anuncio es capaz de mostrar contenido verificando eventos y errores.

Podéis descargar el ejemplo realizado a continuación:

Publicación

Una vez tengamos nuestra aplicación lista y testeada es hora de publicar la aplicación. Al crear el paquete y subirlo a la Store, si la App usa Ad Mediator, se detecta automáticamente junto a las redes de anuncios utilizadas. En este caso tendremos disponibles una nueva sección de configuración específica para el Ad Mediator.

Dev Center Ad Mediator

Dev Center Ad Mediator

NOTA: La primera vez que publicamos la aplicación crearemos una configuración general. En las sucesivas actualizaciones podemos crear configuraciones específicas para distintos mercados.

Más información

[Evento WPSUG] Monetización con Fortumo Mobile Payments

FortumoIntroducción

Volvemos a la carga en WPSUG, grupo de usuarios hispanos de Windows Phone, con un nuevo Hangout sobre desarrollo en Windows y Windows Phone. En esta ocasión, trataremos un punto fundamental y prioritario como desarrolladores de aplicaciones móviles, la monetización de las mismas. Una forma sencilla de gestionar la monetización es utilizando las APIs de In App Purchase de WinRT. En la mayoría de ocasiones, no tenemos ningun problema asociado. Sin embargo, debemos tener en cuenta que en estos casos el pago es mediante una tarjeta de crédito asociada a la cuenta de la tienda. No todo el mundo cuenta con tarjeta de crédito, de hecho, si pensamos en ciertos países el problema se acentúa. En algunos países, Microsoft ya soporta pagos con el operador móvil, pero solo contamos con 37 de los 191 países donde se encuentra la tienda disponible. Para mejorar esta situación contamos con Fortumo Mobile Payments, que incrementa y mejora las opciones de pago. En este evento:

  • Aprenderemos que es Fortumo Mobile Payments.
  • Analizaremos todas sus características principales.
  • Integraremos el sistema de pago en una aplicación universal.
WPSUG

WPSUG

El evento

El próximo Miércoles 22 de Octubre, a las 18:00 (GMT+1)  tendra lugar un Hangout en el que tendremos el placer de contar con un ingeniero de Fortumo Mobile, que nos contará de primera mano todos los detalles relacionados con la monetización en Windows y Windows Phone con Fortumo. La sesión sera en ingles. Sin embargo, estaremos tanto Josué Yeray como un servidor para ayudar y gestionar dudas y otros detalles en español.

¿Te apuntas?

Más información

[Windows Phone] Publicidad con Nokia NAX

NAX LogoIntroducción

Al desarrollar una aplicación móvil elegir su modelo de negocio es un punto vital. Los motivos por el cual como desarrollador decidimos publicar aplicaciones son muy variados:

  • Por amor al arte, aprender, etc.
  • Deseamos cubrir un hueco existente.
  • Por dinero.

Hay muchos motivos. Un motivo habitual suele ser el obtener una ganacia económica por nuestro trabajo. Nuestras aplicaciones puede ser gratuitas y de pago. Además, nuestras aplicaciones de pago pueden contar con modo Trial (sumamente recomendado).

Si deseamos obtener un beneficio económico parece obvio que debemos optar por apliaciones de pago. Sin embargo, tenemos otras opciones interesantes para obtener beneficio económico como el uso de publicidad. En la entrada actual vamos a analizar Nokia Ad Exchange (NAX) y como realizar su implementación.

¿Te apuntas?

Registro

El primer paso a realizar será el realizar el registro en: https://nax.nokia.com

Nokia NAX. Registro.

Nokia NAX. Registro.

Obtener el SDK

Tras registrarnos podremos proceder a entrar en el portal. Vamos a descargar el SDKs. Para ello seleccionamos la opción SDK del menú principal:

Obtener SDK

Obtener SDK

Nos descargamos la última versión del SDK para Windows Phone 8 (según escribo estas líneas la última versión es la 1.1.3).

Implementar NAX

Comenzaremos como siempre, crearemos un ejemplo práctico:

Windows Phone Application

La plantilla seleccionada será “Windows Phone Application” para simplificar al máximo el ejemplo.

Procedemos a añadir la librería del SDK descargado. Accedemos a la carpeta donde hemos descomprimido el SDK:

InneractiveAdSDK

InneractiveAdSDK

  • Inneractive.Ad.dll
  • InneractiveAdLocation.cs. La utilizaremos para mejorar la publicidad proporcionada en nuestras aplicaciones apoyandonos en la localización.

Hacemos clic derecho sobre Referencias y elegimos la opción “Añadir Referencia” donde procedemos a buscar la librería Inneractive.Ad.dll.

NOTA: Si nos aparece el siguiente mensaje:

A reference to a higher version or incompatible assembly cannot be added to the project

A reference to a higher version or incompatible assembly cannot be added to the project

Necesitamos desbloquear la librería. Haga clic derecho sobre la librería y haga clic sobre Propiedades. Al final de las opciones del popup que aparece dentro del apartado Seguridad haga clic sobre el botón “Desbloquear”.

Añadimos también la clase InneractiveAdLocation al proyecto.

Antes de continuar, para que Nokia Ad Exchange funcione correctamente debemos modificar el archivo Properties/WMAppManifest.xaml activando las siguientes capacidades:

  • ID_CAP_LOCATION
  • ID_CAP_NETWORKING
  • ID_CAP_WEBBROWSERCOMPONENT
  • ID_CAP_PHONEDIALER
  • ID_CAP_IDENTITY_DEVICE
Properties/WMAppManifest.xaml

Properties/WMAppManifest.xaml

Una vez añadida la librería y modificado el archivo de manifiesto, estamos preparados para comenzar a integrar la publicidad en nuestra aplicación. Nos dirigimos a la vista principal (MainPage.xaml) para definir la interfaz de nuestra aplicación.

Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
     <Grid.RowDefinitions>
          <RowDefinition Height="*"/>
          <RowDefinition Height="50"/>
     </Grid.RowDefinitions>
</Grid>

En la segunda fila es donde colocaremos la publicidad (300 x 50). Definimos tres botones:

<Button x:Name="textAd" Content="Texto"/>
<Button x:Name="bannerAd" Content="Banner"/>
<Button x:Name="interstitalAd" Content="Interstitial"/>

Hemos añadido tres botones:

  • El primer botón añadirá publicidad en formato texto.
  • El segundo añadirá un banner publicitario (imagen).
  • El tercero establece la publicidad a pantalla completa.

Añadimos los eventos clic de cada botón:

<Button x:Name="textAd" Content="Texto" Click="textAd_Click"/>
<Button x:Name="bannerAd" Content="Banner" Click="bannerAd_Click"/>
<Button x:Name="interstitalAd" Content="Interstitial" Click="interstitalAd_Click"/>
private void textAd_Click(object sender, System.Windows.RoutedEventArgs e)
{

}

private void bannerAd_Click(object sender, System.Windows.RoutedEventArgs e)
{

}

private void interstitalAd_Click(object sender, System.Windows.RoutedEventArgs e)
{

}

El resultado conseguido hasta ahora debe ser algo como:

Ejemplo NAX

Ejemplo NAX

Hasta ahora simple, ¿verdad?. Continuamos.

Necesitamos añadir dos namespaces para trabajar con NAX:

using Inneractive.Nokia.Ad;
using InneractiveAdLocation;

En el constructor de la clase:

IaLocationClass iaLocation = new IaLocationClass();
iaLocation.Done += new System.EventHandler<IaLocationEventArgs>(iaLocation_Done);
iaLocation.StartWatchLocation();

Dictionary<InneractiveAd.IaOptionalParams, string> optionalParams = new Dictionary<InneractiveAd.IaOptionalParams, string>();
optionalParams.Add(InneractiveAd.IaOptionalParams.Key_OptionalAdWidth, "320"); //Width
optionalParams.Add(InneractiveAd.IaOptionalParams.Key_OptionalAdHeight, "50"); //Height
optionalParams.Add(InneractiveAd.IaOptionalParams.Key_Age, "25");
optionalParams.Add(InneractiveAd.IaOptionalParams.Key_Gender, "m");

Creamos un diccionario de parametros donde definimos las propiedades del anuncio (tamaño del banner, público y género objetivos, etc) junto a la inicialización de la clase añadida anteriormente que llamará a un método llamado StartWatchLocation que realizará una geolocalización de la posición para poder determinar donde se encuentra el usuario en ese momento e intentar ofrecer la publicidad más cercana y relacionada posible con el entorno del mismo.

La lógica para iaLocation_Done:

void iaLocation_Done(object sender, IaLocationEventArgs e)
{
     try
     {
          // Add location, if received
          if (e != null && e.location != null)
               optionalParams.Add(InneractiveAd.IaOptionalParams.Key_Gps_Coordinates, e.location);
     }
     catch (Exception ex)
     {
          System.Diagnostics.Debug.WriteLine("Error: " + ex.ToString());
     }
}

Una obtenida las coordenadas de la posición se añaden como parámetros  al diccionario a utilizar en nuestra publicidad.

Añadimos la lógica para cada botón de nuestra interfaz. Nos concentramos primero en el primero de ellos:

private void textAd_Click(object sender, System.Windows.RoutedEventArgs e)
{
     this.nax.Children.Clear();
     InneractiveAd.DisplayAd("appId", InneractiveAd.IaAdType.IaAdType_Text, this.nax, 60, optionalParams);
}

La primera línea sencillamente elimina cualquier contenido hijo del grid donde colocaremos la publicidad.La segunda línea es la interesante. Llamamos al método DisplayAd pasandole los siguientes parámetros:

  • AppId: Valor que generamos en nax.nokia.com dentro del apartado Add App:
Add App

Add App

  • IaAdType: Tipo de publicidad a mostrar. Como veremos en los distintos botones, tenemos varias opciones interesantes aquí.
  • Contenedor: Lugar donde incrustaremos la publicidad. Los tamaños soportados son:
    • 300 x 50
    • 320 x 53
    • 300 x 250
    • 320 x 480 (Full Screen)

    NOTA: El tamaño utilizado en esta demo es de 300 x 50.

  • Tasa de refresco: Medido en segundos.
  • Parámetros: Lista de parámetros anteriormente rellenos (tamaño, geolocalización, etc.).

El resultado pulsando este botón sería algo como:

Texto

Texto

Continuamos con el segundo botón donde mostraremos un banner con imagen:

private void bannerAd_Click(object sender, System.Windows.RoutedEventArgs e)
{
     this.nax.Children.Clear();
     InneractiveAd iaBanner = new InneractiveAd("appId", InneractiveAd.IaAdType.IaAdType_Banner, 60, optionalParams);
     this.nax.Children.Add(iaBanner);
}
Banner

Banner

Fácil, ¿verdad?. Es igual al caso anterior cambiando el tipo de publicidad. Lo interesante a analizar es la versatilidad otorgada por la librería. Hemos instanciado el banner para poder hacer algo como lo siguiente:

private void bannerAd_Click(object sender, System.Windows.RoutedEventArgs e)
{
     this.nax.Children.Clear();
     InneractiveAd iaBanner = new InneractiveAd("appId", InneractiveAd.IaAdType.IaAdType_Banner, 60, optionalParams);
     this.nax.Children.Add(iaBanner);

     iaBanner.AdClicked += new InneractiveAd.IaAdClicked(InneractiveAd_AdClicked);
     iaBanner.AdReceived += new InneractiveAd.IaAdReceived(InneractiveAd_AdReceived);
     iaBanner.AdFailed += new InneractiveAd.IaAdFailed(InneractiveAd_AdFailed);
}

Añadimos los eventos:

void InneractiveAd_AdClicked(object sender)
{
     System.Diagnostics.Debug.WriteLine("AdClicked");
     MessageBox.Show("NAX Ad Clicked!");
}

void InneractiveAd_AdReceived(object sender)
{
     System.Diagnostics.Debug.WriteLine("AdReceived");
}

void InneractiveAd_AdFailed(object sender)
{
     System.Diagnostics.Debug.WriteLine("AdFailed");
}

Mediante simples eventos podemos controlar el ciclo de vida de la publicidad, cuando se recibe, cuando no, cuando el usuario hace clic sobre ella, etc.

Evento clic

Evento clic

Por último, nuestro tercer botón (otro tipo de publicidad):

private void interstitalAd_Click(object sender, System.Windows.RoutedEventArgs e)
{
     InneractiveAd.DisplayAd("appId", InneractiveAd.IaAdType.IaAdType_Interstitial, LayoutRoot, 60);
}
Interstital

Interstital

Interesante, ¿no?. Si asi te ha parecido puedes descargar el ejemplo realizado a continuación:

Como hemos podido analizar NAX se planta como un sistema interesante, disponible para múltiples plataformas, múltiples sistemas de publicidad y muy fácil de integrar. Espero que lo visto en la entrada os sea de interés. Recordar que si os surgen dudas o sugerencias podéis dejarlas en los comentarios de la entrada.

Keep Pushing!

Más información