Posts destacados

Nuevo libro de desarrollo para Windows 8 y Windows Phone 8Nuevo libro de desarrollo para Windows 8 y Windows... Desde hace tiempo, estoy un poco alejado del mundanal ruido de blogs, twitter y demás. La razón no ha sido otra que hacer posible un deseo que tenia desde hace mucho tiempo,...

Read more

Preparándonos para el #MegathonW8 y II – Instalando las herramientas de desarrollo.Preparándonos para el #MegathonW8 y II –... Una vez que ya tenemos nuestro flamante Windows 8 instalado en nuestro disco duro virtual, según los pasos del primer capitulo de esta guía. Lo que debemos de hacer es instalarnos...

Read more

Preparándonos para el #MegathonW8 y I Instalación de Windows 8 en un VHDPreparándonos para el #MegathonW8 y I Instalación... Este es el primer post de una serie de ellos cuya intención es facilitar a los asistentes al megathon que se celebrara en breve, las instrucciones necesarias para conocer...

Read more

Beca para el Megathon Windows 8Beca para el Megathon Windows 8 Como seguramente todos ya sabréis, los próximos días 7, 8 y 9 de Septiembre se celebrara en varias ciudades españolas al mismo tiempo un hackathon sobre desarrollo para...

Read more

[OFFTOPIC] Oferta de trabajo.[OFFTOPIC] Oferta de trabajo. Madre mía, hasta ahora realmente no me había dado cuenta de lo abandonado que tengo mi blog, como pasa el tiempo de rápido por dios… Demasiadas cosas a hacer tanto dentro...

Read more

Windows Phone y .NET Rss

Megathon 2013

Posteado el : 16-03-2013 | Por : admin | En : Eventos, Windows 8, Windows Phone 8

0

dn144953.Megathon2013(es-es,MSDN.10)

Un año más, vuelve el Hackathon multiciudad simultáneo. El Megathon, durante el fin de semana del 12 al 14 de abril.

Este año se va a cambiar la dinámica del concurso. Por un lado se podrá desarrollar aplicaciones tanto para Windows 8 como para Windows Phone 8, los premios se incrementan, pero seguro que el buen ambiente y el buen rollo durante todo el fin de semana se va a mantener respecto al pasado año.

Yo, en esta ocasión, tengo el gran honor de estar como mentor en la sede de Salamanca. Los chicos del club .NET de la universidad de Salamanca, USAL, han querido que este con ello intentando ayudar en todo lo que pueda. Eso sí, estoy convencido que los ganadores globales del Megathon este año saldrán de Salamanca. No os quepa duda!!!!!

Otra de las cosas que este año han cambiado ha sido la formación. Muchos opinaron que el pasado año, combinar la formación con el tiempo para desarrollar fue algo estresante. En muchas ocasiones los mentores se encontraron dando charlas al limbo ya que todo el personal estaba dale que te dale a programar, lo digo por experiencia. En esta ocasión los chicos de DPE España, han tenido la gran idea de realizar unas formaciones online, los días previos al megathon.

Por lo tanto entre el próximo día 20 de Marzo y el 11 de Abril podéis “disfrutar” de sesiones de formación tanto de programación en Windows 8, Windows Phone, Azure y Team Foundation Services.

Si queréis mas información, no dudéis en acudir a la web habilitada para tal efecto en la web de Microsoft España.

www.microsoft.es/megathon

Allí encontrareis las bases, las ciudades, recursos de formación, etc., etc.….

Nos vemos en el MEGATHON!!!!

Share

Trials en Windows Phone.

Posteado el : 19-02-2013 | Por : admin | En : Windows Phone 7, Windows Phone 8

0

Si, lo sé. Gestionar que nuestra aplicación tenga o no capacidad de prueba no deja de ser algo muy trivial. Pero, de cosas triviales siempre se aprende algo…

Lo primero que debemos de hacer es controlar de alguna forma si nuestra aplicación esta en modo trial o no. Para ello usaremos la clase LicenseInformation contenida en el espacio de nombres Microsoft.Phone.MarketPlace.

Algún habido lector, habrá pensado, …..MarketPlace?, pero si eso suena a viejuno. Pues si, aunque con la aparición de Windows Phone 8 y el uso de WinRT existe un nuevo espacio de nombres para cualquier tipo de consulta relacionada con estos menesteres, concretamente Windows.ApplicationModel.Store, la clase LicenseInformation que deriva de dicho namespace no se puede usar en Windows Phone 7.x por lo que la mejor forma para hacer este trozo de código totalmente compatible tanto con Windows Phone 7.x como con Windows Phone 8, es usar la clase LicenseInformation de Microsoft.Phone.Marketplace.

Bueno, entonces está claro. Ahora, ¿cual debería de ser la mejor implementación?. Obviamente no quiero sentar cátedra pero siendo un poquito costosa, hablando de rendimiento, la labor de comprobar si nuestra aplicación es o no una versión de prueba. Lo suyo seria realizar esta consulta una sola vez y “archivar” esta información en algún lugar accesible.

Para ello, una de las mejores formas es disponer en nuestro fichero App.xaml.cs de una variable publica y estatica la cual implemente guarde dicha información.

private static bool isTrial;
public static bool IsTrial
{
   get
   {
      return isTrial;
   }
}

Así mismo dispondremos de un procedimiento el cual comprobará mediante la clase LicenseInformation comentada anteriormente, si es o no, nuestra aplicación una versión de prueba. Le llamaremos por ejemplo CheckLicense.

private void CheckLicense()
{
   LicenseInformation license = new Microsoft.Phone.Marketplace.LicenseInformation();
   isTrial = license.IsTral();
}

Ok, perfecto. Simplemente implementamos la clase LicenseInformation y comprobamos su método isTrial, el cual nos devuelve un booleano indicándonos el estado.

Ahora debemos de lanzar en el lugar y momento correcto, el código anterior. Dos son los lugares en donde deberemos de lanzarlo. Por un lado el evento Launching de nuestra aplicación. De esta forma cada vez que lanzamos la aplicación comprobamos el valor.

private void Application_Launching(object sender, LaunchingEventArgs e)
{
    CheckLicense();
}

El otro punto sería el evento Activated. ¿Para que?, si nuestra aplicación no va a cambiar su estado constantemente. Pues básicamente para poder controlar de forma correcta que se haya podido adquirir la aplicación de forma completa mediante un enlace colocado en nuestra aplicación o cuando nuestra aplicación esta suspendida. De esta manera al volver a activarla desde el estado de tombstoning recogemos el valor de forma correcta y actuamos en consecuencia.

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    CheckLicense();
}

Perfecto ya tenemos controlado el acceso a la comprobación solamente en dos puntos, accediendo a la información en cualquier momento sin consumo de recurso alguno.

Vamos a plantear una pantalla muy sencilla la cual, recoja este valor y realice una serie de acciones.

<Grid>
    <Grid Margin="0,0,0,0">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>

        <TextBlock Grid.Row="0" Text="Trial version example"
                    VerticalAlignment="Top"
                    Margin="12,12,0,12"
                    FontSize="42">
        </TextBlock>

        <StackPanel Grid.Row="1">
            <Button Content="action A"
                    Margin="0,130,0,0"
                    HorizontalAlignment="Center"
                    Width="350"
                    Command="{Binding ActionACommand}">
            </Button>
            <Button Content="action B"
                    HorizontalAlignment="Center"
                    Width="350"
                    Command="{Binding ActionBCommand}">
            </Button>
            <Button Content="purchase complete version"
                    Margin="0,130,0,0"
                    HorizontalAlignment="Center"
                    Visibility="{Binding TrialVersion,
                                Converter={StaticResource BoolToVisibility}}"
                    Width="350"
                    Command="{Binding PurchaseCommand}">
            </Button>
        </StackPanel>
    </Grid>
</Grid>

Obviamente (faltaría más) todo nuestro XAML usa una ViewModel de MVVM para realizar toda la lógica de nuestra pagina. Como podéis ver disponemos de 3 sencillos botones. El ultimo de los botones usa un converter para convertir la propiedad TrialVersion de nuestra ViewModel en el correspondiente valor de la enumeración System.Windows.Visibility.

Veamos ahora nuestra ViewModel por partes.

public class VMMainPage : VMBase
{
    bool trialVersion = true;
    Lazy<DelegateCommand> actionACommand;
    Lazy<DelegateCommand> actionBCommand;
    Lazy<DelegateCommand> purchaseCommand;

    public VMMainPage()
    {
        this.trialVersion = App.IsTrial;
        ........
    }

    public bool TrialVersion
    {
        get
        {
            return this.trialVersion;
        }
    }

    ...........
    ...........
}

Hemos creado una variable privada la cual en el momento de instanciar nuestra ViewModel toma el valor de la variable estática contenida en nuestro App.xaml.cs. Por otro lado hemos creado las variables privadas de los DelegateCommands que usaremos a continuación.

Podemos ver también la propiedad publica TrialVersion, que hemos usado en nuestra vista para visualizar o no, a través del converter, el botón de purchase o compra de la aplicación.

    private void ActionACommandExecute()
    {
        MessageBox.Show("Action A");
    }

    private void ActionBCommandExecute()
    {
        MessageBox.Show("Action B");
    }

    private bool ActionBCommandCanExecute()
    {
        return !this.trialVersion;
    }

Ahora vemos la implementación de los comandos asignados a los dos primeros botones. Estos simplemente muestran un mensaje en pantalla (esto lo deberíamos de hacer con un servicio, pero bueno para no complicar mas las cosas…) En la inicialización del primero de ellos, no hemos asignado nada a la función de retorno del CanExecute, pero si en el caso del segundo botón.

En el ejemplo dejamos el primer botón accesible a cualquiera de los dos tipos de estado de la aplicación, mientras que el segundo botón, estará deshabilitado si la aplicación está en versión Trial. Para ello retornamos el valor contrario a la variable privada isTrial como respuesta en el CanExecute de este segundo botón.

El resultado hasta el momento de nuestro pequeño ejemplo es el siguiente:

TrialAndComplete

La mejor forma de dirigir al usuario a comprar la versión completa de nuestra aplicación es utilizar el lanzador MarketPlaceDetailTask, como podemos ver en la implementación del comando que ejecuta nuestro tercer botón.

    private void PurchaseCommandExecute()
    {
        MarketplaceDetailTask market = new MarketplaceDetailTask();

        market.Show();
    }

Así de sencillo. Simplemente instanciamos el lanzador y lo ejecutamos con su método Show. La clase MarketplaceDetailTask dispone de una propiedad denominada ContentIdentifier, la cual acepta un valor string que representa el ID del producto del cual queremos mostrar sus características para proceder a la compra. Si este valor no es asignado o es asignado un valor nulo, el lanzador muestra los datos de la aplicación la cual le ha llamado.

Lamentablemente si la aplicación no esta publicada, ya estemos ejecutando en el emulador o en un dispositivo físico, la llamada al método show de la clase nos lanzara un error como el que vemos a continuación. Es algo que debemos de tener en cuenta.

MarketPlaceDetailTask

Bueno, pues llegados a este punto ya sabemos como controlar si nuestra aplicación esta en versión trial o versión completa. Como de forma muy sencilla poder gestionarlo con MVVM y como poder realizar la compra mostrando la correspondiente pagina de la Windows Phone Store de nuestra aplicación. Pero, ¿como podemos probar para dar valores según nos convenga a la variable IsTrial de nuestro App.xaml.cs?

Ya que si ejecutamos la aplicación tal y como la tenemos hasta el momento al leer el valor del método isTrial, de la clase LicenseInformation, este siempre nos devuelve false.

Para ello existen principalmente dos formas, que cada uno usa según le parezcan. Por un lado podríamos detectar si estamos en modo debug y preguntar si queremos ejecutar en modo trial o en modo full.

private void CheckLicenseWithQuestion()
{
#if DEBUG
    string message = "Pulsa 'OK' para simular el modo trial. Pulsa 'Cancel' para ejecutar la aplicación en modo normal.";
    if (MessageBox.Show(message, "Debug Trial",MessageBoxButton.OKCancel) == MessageBoxResult.OK)
    {
        isTrial = true;
    }
    else
    {
        isTrial = false;
    }
#else
    LicenseInformation license = new Microsoft.Phone.Marketplace.LicenseInformation();

    isTrial = license.IsTrial();
#endif
}

En el código anterior hemos modificado nuestro procedimiento CheckLicense para que, mediante el uso de directivas de compilación condicional, en el caso de que estemos compilando en modo debug, nos lance una pregunta para elegir el modo de prueba de la aplicación. Activado o desactivado. En el caso de que estemos compilando en versión release, directamente se comprobara el modo de ejecución a través de la clase LicenseInformation. El resultado seria el siguiente:

TrialWithQuestion

Pero este método solo funcionara en aplicaciones para Windows Phone 7.x, ya que la llamada al método Show, de nuestro MessageBox, en Windows Phone 8 no se puede hacer hasta que no se ha inicializado el elemento RootVisual de nuestra aplicación. Es decir para poder usar este método en WP8, no es posible indicar la llamada en el evento Launching, sino que lo deberemos de invocar en el evento CompleteInitializePhoneApplication, tras la asignación del RootVisual.

Esto trae mas problemas, ya que si llamamos en ese lugar al procedimiento CheckLicense, nuestra ViewModel principal ya a sido creada por lo que ya hemos recogido los valores de la propiedad IsTrial, sin haberla dado el valor que queremos. La implementación en este caso debe de ser diferente y deberíamos de comprobar los valores de dicha propiedad sobrescribiendo el evento OnNavigatedTo de nuestra pagina principal.

Otra forma seria seguir implementando el procedimiento CheckLicense como hasta el momento, y simplemente en el modo debug activar siempre el modo trial.

private void CheckLicense()
{
#if DEBUG
    isTrial = true;
#else
    LicenseInformation license = new Microsoft.Phone.Marketplace.LicenseInformation();

    isTrial = license.IsTrial();
#endif
}

Esto tiene un gran inconveniente y es que para poder probar la versión completa, deberemos de compilar en modo release, perdiendo todo lo que el modo debug nos aporta. Para solventar este problema podríamos crear en Visual Studio una nueva configuración de compilación. Para ello debemos de dirigirnos al menú “Build > Configuration Manager”. Dentro de él, seleccionamos del combo “Active solution configuration”, el valor “<New…>”.

ConfigurationManager

En la nueva pantalla que se abre, indicaremos un nombre para la nueva configuración, por ejemplo “Debug Trial” e indicaremos que queremos copiar todos los valores de la configuración ya existente “Debug”.

ConfigurationManager2

Una vez creada esta nueva configuración vamos a otorgarla una valor necesario para nuestro cometido. Para ello, entraremos en las propiedades de nuestro proyecto y en la pestaña de “Build” seleccionaremos la nueva configuración que acabamos de crear, en este caso “Debug Trial”.

ProjectConfiguration

Una vez seleccionada, solamente deberemos de añadir en la casilla de “Conditional compilation symbols:” la palabra “TRIAL” precedida de un punto y como para separarla de las que ya existen. Ojo en el ejemplo indico la palabra Trial, pero obviamente podríamos usar la que quisiéramos.

ProjectConfiguration2

Con nuestra nueva configuración ya creada y parame trizada a nuestro gusto, tan solo nos resta modificar definitivamente nuestro procedimiento para adecuarle a los nuevos cambios.

private void CheckLicense()
{
#if TRIAL
    isTrial = true;
#else
    LicenseInformation license = new Microsoft.Phone.Marketplace.LicenseInformation();

    isTrial = license.IsTrial();
#endif
}

Como vemos la directiva de compilación condicional, ahora busca la palabra “TRIAL” en vez de genéricamente “DEBUG” como anteriormente. Ahora cuando queramos ejecutar en modo debug versión trial, seleccionaremos una opción de compilación, en el caso de compilar en modo debug en versión completo, seleccionaremos otra. Según nos convenga en cada caso.

Execute

Ya tenemos todo nuestro código implementado. Como comento al principio esta es una de las muchas formas de realizar la gestión de las versiones trial de nuestras aplicaciones.

Pero una cosa es segura, cualquier aplicación de pago que se precie de disponer si o si de una versión Trial. Los datos aportados por la Windows Phone Store lo indican. Las aplicaciones con versiones trial son descargadas 70 veces mas que las que no las tienen. Con una media de un 10% de conversiones a versión completa. Lo que representa un 10 veces más ingresos que una aplicación que no disponga de versión trial.

Aquí os dejo el enlace a un ejemplo de código que muestra todo lo que he comentado hasta el momento.

Para cualquier cosa, ya sabéis donde estoy…. 

A pasarlo bien.

Share

I APP YOU

Posteado el : 01-02-2013 | Por : admin | En : Windows 8, Windows Phone 8

0

Una vez mas vuelve el concurso semanal por excelencia de aplicaciones para Windows Phone de la mano de Microsoft Ibérica. A partir de hoy mismo, 1 de febrero y hasta el 15 de Mayo. Se sorteara una XBOX 360 por semana para todo aquel que desarrolle y publique en la Windows Phone Store una aplicación.

300x250-iapp

Pero este año disponemos de otra categoría. Y es que también cualquier persona que desarrolle y suba una aplicación para Windows 8, también tendrá su propio sorteo de otra XBOX 360 por semana.

La adjudicación de premios es por riguroso sorteo entre todos los participantes en la promoción, 1 premio para Windows Phone y otro para Windows 8. En esta ocasión no existirá ni jurado ni calificación de la aplicación, quien mas suerte tenga será quien se lleve el gato al agua.

A parte de esto si durante el transcurso de esta promoción es activada una subscripción a Windows Azure, podrás ganar una subscripción a MSDN.

Un aliciente mas para desarrollar……

Suerte a todos.

Share

Desarrollo en Windows 8 y Windows Phone 8 en C# y XAML

Posteado el : 15-01-2013 | Por : admin | En : Libros, Windows 8, Windows Phone 8

1

Bueno, pues lo que comenzó hace ya medio año, y que tuvimos una pequeña previa recientemente, ya es una realidad. Hoy 15 de Enero de 2013, ya esta disponible para su compra nuestro mega libro de desarrollo en C# y XAML.

Recuerdo ahora mismo las muchas conversaciones que Yeray y yo hemos mantenido sobre la escritura de este libro. Sobre disponer en español de una buena fuente de información sobre la programación en estas plataformas siguiendo un patrón de diseño especifico, en este caso MVVM y trabajando siempre con buenas practicas.

Lo que en su momento iba a ser algo sencillo, de distracción para el verano, se fue convirtiendo poco a poco en un mastodonte que no hacia mas que crecer en contenido. Seguramente a ambos nos hubiera gustado contar mas cosas en el libro. Por ejemplo por falta de tiempo nos hemos dejado en el tintero cosas como la gestión de procesos en Background, la gestión de trials, el In-app purchase, y muchos mas etcéteras que seguro poco a poco irán viendo la luz en nuestros respectivos blogs…

Pues nada, lo dicho, aquí podéis adquirir nuestro nuevo libraco y a empezar a degustarlo poquito a poquito, que tiene su miga.

Desarrollo-Windows-8-350

Por cierto, gracias a la colaboración de Nokia España, todos los que compréis el libro el primer mes, entrareis en el sorteo de un flamante Nokia Lumia 820, una subscripción al WP Dev Center, componentes de Telerik y alguna cosilla más.

Con lo que no podéis dejar pasar esta oportunidad. ALE A COMPRAR…..

Antes de terminar, quiero dejar aquí constancia de los agradecimientos expresados por mi parte en el libro. Nunca podre expresar todo lo que mi familia me ha ayudado para poder llegar hasta aquí, por lo que esto es otra pequeña gota de gratitud.

“Cuando hace ya unos cuantos meses, Yeray y yo decidimos escribir este libro, jamás me hubiera imaginado que fuera a ser una de las tareas más costosas de todo cuanto he realizado hasta el momento. Todo el tiempo que he dedicado en su escritura, se lo he tenido que robar al sueño y por supuesto a mi familia. Por esa razón, solo puedo agradecer a mi mujer Susana y a mi hija Celia, su inmensa paciencia al verme un día sí  y otro también pegado al portátil, sin dedicarlas en los últimos meses el tiempo que ambas se merecen. Gracias por vuestro apoyo constante y por creer tanto en mí"

Share

Nuevo libro de desarrollo para Windows 8 y Windows Phone 8

Posteado el : 14-11-2012 | Por : tecnologia | En : Libros, Windows 8, Windows Phone 8

2

Desde hace tiempo, estoy un poco alejado del mundanal ruido de blogs, twitter y demás. La razón no ha sido otra que hacer posible un deseo que tenia desde hace mucho tiempo, escribir un libro. Antes de nada, que se que nadie lee los post hasta el final. Aquí esta el enlace para que lo podáis comprar YA. Hace tiempo, nos propusimos el amigo Yeray y yo, que teníamos que escribir algo juntos. Sinceramente jamás creí que me iba a costar tanto poder plasmar en papel todos los conocimientos que tengo en mi cabeza, por que amigos una cosa es escribir un blog y otra muy distinta escribir un libro. Pero bueno, después de muchas horas de trabajo y muchas horas de sueño perdido, junto con la ayuda de dos cracks, Ibón Landa, nuestro colaborador incansable y José Manuel Alarcón, nuestro editor convencido, este libro puede estar en la calle.   Os presento “Introducción al desarrollo en Windows 8 y Windows Phone 8”, este “mini” libro consta de 190 paginas en las que abordamos una introducción a las herramientas de desarrollo para ambos sistemas, descripción de conceptos de programación basados en el patrón Model View ViewModel (MVVM), el lenguaje visual XAML, los principales elementos de una interfaz visual tanto para Windows 8 como para Windows Phone 8 y por ultimo una explicación detallada de que pasos debemos seguir para publicar nuestras aplicaciones tanto en la Windows Store como en la Windows Phone Store. Pero aquí no acaba la cosa, esto es solo un pequeño aperitivo, es la avanzadilla de algo mucho mas grande, es simplemente una introducción del libro “Desarrollo en Windows 8 y Windows Phone 8”. Un libraco de casi 500 paginas con el que pretendemos guiar a cualquier desarrollador en las nuevas características de programación para ambos sistemas. Pero para esto aun tenemos que esperar un poco mas. Eso si gracias a Krasis Press, todo aquel que adquiera el libro de introducción, el cual solo esta disponible en versión PDF, dispondrá de un cupón de descuento del importe total si decides comprar el libro grande. Así que os lo vuelvo a recordar. COMPRAD MI LIBRO, que aunque esto no lo hayamos hecho para salir de pobres (bueno nunca se sabe), al menos nos queremos tomar alguna que otra caña a vuestra salud. Por ultimo, desde aquí quiero agradecer el inmenso trabajo de mi compañero de fatigas, Josué Yeray, sin mi aportación es muy probable que el libro en algún momento estuviera de todos modos en la calle, pero sin la suya este proyecto jamás hubiera llegado a su fin. En mis años de juventud en el colegio recuerdo haber plantado mas de 1 árbol. Tengo una mujer estupenda y una hija que es un autentico regalo y un sol de niña. Acabo de escribir y publicar un libro. Si, ya me puedo morir en paz.

Share