En un post anterior vimos que ya podemos utilizar Mobile Services con .NET y como desplegar nuestra aplicación realiza con Web API sobre este. Ahora vamos a ver cómo podemos integrar en nuestro código backend las diferentes funcionalidades que ya nos vienen implementadas por utilizar Mobile Services. Entre estas funcionalidades encontramos las siguientes:

  • Autenticación con proveedores OAuth como Microsoft, Google, Twitter o Facebook.
  • Tareas programadas.
  • Notificaciones Push.

Autenticación

Una de las ventajas que nos proporciona Mobile Services, es la autenticación de los usuarios mediante diferentes proveedores de OAuth como Microsoft, Google, Twitter o Facebook. Para incluirla dentro de nuestro backend lo único que necesitamos realizar es añadir la siguiente sentencia using en nuestro código:

using Microsoft.WindowsAzure.Mobile.Service.Security;

Ahora simplemente tenemos que especificar qué tipo de autenticación queremos utilizar. Esto lo podemos especificar tanto a nivel de controlador como a nivel de método. Tenemos los siguientes tipos de autenticación:

  • Anonymous, cualquiera puede llamar a nuestro servicio.
  • Application, cualquiera con la clave de aplicación puede llamar a nuestr servicio.
  • User, solo usuarios autenticados pueden llamar a nuestro servicio.
  • Admin, solo los usuarios pueden llamar a nuestro servicio.

Ahora solo faltaría añadir delante de nuestro controlador/método la siguiente línea para poder autenticar a los usuarios con el nivel que elijamos:

   1: [RequiresAuthorization(AuthorizationLevel.{Tipo})]

Para poder depurar en local la autenticación tenemos que indicar las diferentes claves de los diferentes proveedores que utilicemos en nuestra aplicación en el web.config del proyecto:

image

Aunque indicemos las diferentes claves en el web.config, también tenemos que indicarlas en el portal de Windows Azure en la sección de identity ya que los valores son reemplazados en Windows Azure. Por lo tanto, podemos utilizar diferentes claves ya estemos en producción o en desarrollo en local.

image

Tareas programadas

Otra de las ventajas que nos proporciona utilizar Mobile Services, son los trabajos programados (ScheduledJobs). Estos también los podemos programar ahora desde .NET directamente junto con nuestro código de Web API. En el código de ejemplo de backend, que podemos descargar el portal de Windows Azure, nos viene un ejemplo de trabajo programado. Este lo podemos encontrar bajo la carpeta ScheduledJobs.

   1: public class SampleJob : ScheduledJob
   2: {
   3:     public override Task ExecuteAsync()
   4:     {
   5:         Services.Log.Info("Hello from scheduled job!");
   6:         return Task.FromResult(true);
   7:     }
   8: }

Como vemos, para implementar nuestra propia tarea programada lo único que tenemos que realizar es heredar de ScheduledJob y sobreescribir el método ExecuteAsync(). Luego para que se llame recurrentemente, desde el portal podemos configurar cada cuanto tiene que ejecutarse la tarea.

Para configurar la tarea tenemos que especificar el nombre de la tarea que queremos programar, en el ejemplo es SampleJob. Además cada cuanto queremos que se ejecute, podemos elegir que se ejecute cada x minutos, horas, días o meses.

image

Notificaciones Push

Otra de las novedades de Mobile Services, es la integración con Notification Hub, el cual nos permite mandar notificaciones push a distintas plataformas de forma sencilla. Notification Hub soporta las principales plataformas, Windows 8, Windows Phone, IOS y Android.

Lo primero que tenemos que realizar para poder utilizar el Notification Hub es configurar las diferentes claves para enviar notificaciones de cada una de las plataformas. Esto lo podemos realizar desde la configuración del Mobile Services o directamente desde el Service Bus que nos crea el Mobile Service.

image

Si queremos probarlo en local, además de introducirlo en el portal de Windows Azure, en el Web.config de nuestro proyecto también tendremos que añadir las diferentes claves junto con el nombre de nuestro Notification Hub:

image

Una vez tenemos configuradas las diferentes cuentas, la clase base TableController ya nos trae un servicio que nos facilita el acceso al Notification Hub. Para enviar notificaciones simplemente tendríamos que realizar lo siguiente:

   1:  
   2: public async Task<IHttpActionResult> PostTodoItem(TodoItem item)
   3: {
   4:     string notificacion = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
   5:     "<wp:Notification xmlns:wp=\"WPNotification\">" +
   6:     "<wp:Toast>" +
   7:     "<wp:Text1>Hola desde Mobile Services en .NET!</wp:Text1>" +
   8:     "</wp:Toast> " +
   9:     "</wp:Notification>";
  10:  
  11:     TodoItem current = await InsertAsync(item);
  12:     await Services.Push.HubClient.SendMpnsNativeNotificationAsync(notificacion);
  13:     return CreatedAtRoute("Tables", new { id = current.Id }, current);
  14: }

 

En el ejemplo anterior, vemos como mandar una notificación de Windows Phone. Tenemos varias funciones para enviar notificaciones a diferentes plataformas, siempre que creemos la notificación en el formato correspondiente.

Conclusiones

Como vemos aprovechar las diferentes ventajas que nos ofrece Mobile Services en nuestra aplicación desarrollada con Web API es muy sencillo y nos facilita diferentes tareas complejas como la autenticación, realización de tareas programadas, notificaciones push. Con la ventaja de tener el servicio en todas las plataformas.

Carlos Carrillo Boj (3lcarry)