WP7: Acceso a la información de Licencia y Al Marketplace desde nuestra aplicación.

Ahora que se acerca la apertura del marketplace para Windows Phone 7 es hora de ir dando los últimos toques a nuestras aplicaciones e ir preparándolas para el gran público.
Algo muy importante para que nuestra aplicación tenga buena acogida entre los usuarios es que estos sean capaces de probarla y verla en funcionamiento antes de tener que invertir su dinero en ella, quizás incluso sería interesante el poder ofrecer a los usuarios una versión gratuita de nuestra aplicación para que la probasen, que tuviese todas las características de la versión de pago y sin limitaciones, usando publicidad para ganar algo de dinero con esta versión y ofreciendo al usuario eliminar esta publicidad comprando la versión de pago.

Tradicionalmente en otras plataformas para aplicaciones móviles de la “competencia” la forma de realizar esto pasaba por crear versiones “Lite” de nuestra aplicación que eran subidas como una aplicación independiente, duplicando de esa forma el esfuerzo necesario para realizar el mantenimiento de nuestra aplicación y duplicando el numero de aplicaciones en la tienda en cuestión.
Microsoft ha resuelto esto, como de costumbre, de forma rápida, elegante y sencilla.

El namespace Microsoft.Phone.Marketplace

Este namespace se encuentra en el ensamblado Microsoft.Phone y en estos momentos expone solo una clase: LicenseInformation.
Esta clase LicenseInformation expone un sólo método: IsTrial, el cual devuelve un valor boolean indicando si nuestra aplicación se encuentra en modo de prueba o no.
Pero…. ¿Como sabe esto el teléfono? Bueno, el sistema que usan en microsoft para instalar la aplicación en un dispositivo y validar que proceda del marketplace hace posible la magia:
Cuando el usuario accede a los detalles de nuestra aplicación en el marketplace se le presenta la opción de “probarla” o “comprarla”, en cualquiera de los dos casos la aplicación descargada es la misma, pero el certificado de seguridad que se descarga es distinto, en el caso de que la compre, se descarga el certificado real de la aplicación, sin embargo si se descarga una “prueba” el certificado que obtenemos es un certificado de pruebas, De esta forma examinando este certificado podemos saber en que estado se encuentra nuestra aplicación, y una vez que el usuario acabe de probar y decida comprar, no debe descargar de nuevo toda la aplicación, tan solo obtendrá el certificado real y la aplicación empezará a funcionar de forma completa.
Bien, como puedes ver es muy sencillo y transparente tanto para el desarrollador como para el usuario. Para implementar este comportamiento solo debemos comprobar cuando nos interese la respuesta del método IsTrial en la clase LicenseInformatión, Por ejemplo podríamos llamar a este método en los eventos Launching y Activated de nuestra aplicación y guardar el resultado en una variable global que nos permita consultarla desde cualquier punto de la aplicación de forma sencilla:
Primero definimos nuestra variable en la clase App:
public partial class App : Application
{
public static Boolean DemoMode = false;
}

En el evento Launching, que se ejecuta cuando la aplicación se abre desde 0, sin que haya sido desactivada por otro programa o por el usuario, comprobamos en que modo nos encontramos:

// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
//Comprobamos si nos encontramos en modo demo.
Microsoft.Phone.Marketplace.LicenseInformation InfoLicencia;
InfoLicencia = new Microsoft.Phone.Marketplace.LicenseInformation();
//Establecemos si nos encontramos en modo demo.
DemoMode = InfoLicencia.IsTrial();
}

Y en el evento Activated, que se ejecuta cuando la aplicación se abre después de ser desactivada por otro proceso o por el usuario, comprobamos en que modo nos encontramos de nuevo:

// Code to execute when the application is activated (brought to foreground)
// This code will not execute when the application is first launched
private void Application_Activated(object sender, ActivatedEventArgs e)
{
//Comprobamos si nos encontramos en modo demo.
Microsoft.Phone.Marketplace.LicenseInformation InfoLicencia;
InfoLicencia = new Microsoft.Phone.Marketplace.LicenseInformation();
DemoMode = InfoLicencia.IsTrial();
}

Y con esto, en nuestro código ya solo tendremos que comprobar el valor de la propiedad DemoMode de la clase App para saber si debemos mostrar la publicidad, limitar el numero de items de algunas listas, pedirle al usuario que nos ayude a llegar a fin de mes o la estrategia que queramos seguir para mostrar y vender nuestra aplicación.

Bien, ya sabemos como convertir nuestra aplicación en una demo de forma automática, pero…. ¿como hacemos para ayudar al usuario a comprar nuestra aplicación? Bien, aquí entra en juego uno de los Launchers de WP7: el MarketplaceDetailTask.

El launcher MarketplaceDetailTask

Espera, espera…. ¿Por las barbas de mi abuelo…..que es un launcher? Bien, es muy común el caso en el que queramos hacer uso de funcionalidad del propio sistema operativo, como puede ser hacer una llamada, enviar un email o sms, abrir el navegador web y algunas cosas más. Esto lo podemos realizar mediante un Api que expone el sistema, localizada en el namespace Microsoft.Phone.Tasks. Hay dos tipos de tareas, las que lanzan una característica del teléfono, como por ejemplo enviar un email, y no devuelven nada a nuestra aplicación se llaman Launchers y las que lanzan una característica del teléfono y devuelven un resultado, como por ejemplo seleccionar una imagen del HUB de imágenes, que se llaman Choosers.

Una vez aclarado esto, existe un Launcher llamado MarketplaceDetailTask que nos permite abrir desde nuestra aplicación el Hub del marketplace del sistema en los detalles de una aplicación específica.

Esta clase tiene dos propiedades principales: ContentType y ContentIdentifier:

 

  • ContentType indica el tipo de contenido que podemos mostrar, se le asigna un valor del enumerador Microsoft.Phone.Tasks.MarketplaceContentType, que puede ser Applications o Music.
  • ContentIdentifier indica el ID único del marketplace de la aplicación que queremos mostrar, si queremos mostrar los detalles de nuestra propia aplicación bastará con pasarle un valor nulo.

Por último, solo debemos usar el método Show de la clase MarketplaceDetailTask para que nuestra aplicación se desactive y se muestre el marketplace con nuestros detalles.

El código quedaría así:

 

Microsoft.Phone.Tasks.MarketplaceDetailTask Detalles;
Detalles = new Microsoft.Phone.Tasks.MarketplaceDetailTask();
Detalles.ContentType = Microsoft.Phone.Tasks.MarketplaceContentType.Applications;
Detalles.ContentIdentifier = App.AppUniqueID;
Detalles.Show();

 

Conclusión

Y con esto terminamos este artículo, Como siempre os dejo un pequeño proyecto de ejemplo con todo lo que hemos visto aplicado, para que podáis probarlo, tened en cuenta que el marketplace os dirá que no se puede acceder en estos momentos, pues todavía no está disponible para su uso.

Podéis contactar conmigo por mi correo, por Twitter, aquí dejando un mensaje o incluso en los foros de Silverlight / WPF de MSDN por los que siempre ando. Estaré encantado de resolver cualquier duda que tengáis (sobre esto… el sentido de la vida no me dejan revelarlo) y charlar un rato con vosotros.

Muchas gracias por leerme, sin todos vosotros estas palabras no tendrían sentido de existir.

Un gran saludo y Happy Coding!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *