lunes, 26 de mayo de 2014

Unity3D Scripting: Notificaciones locales en iOS

Hace un tiempo hice esta pequeña investigación para una pequeña prueba, dicha prueba consistía en parte en hacer las notificaciones locales de iOS y ahora procederé a explicar como lo logré.
Ciertamente no encontré mucha documentación mas que la documentación oficial de cada método disponible para crear notificaciones locales en iOS, así que me creé mi propia clase para usarlas, que en algún momento puede que la amplie para añadir notificaciones locales de Android, las cuales tendré que hacer desde nativo de otra manera ya que Unity3D no lo contempla de momento.

¿Que es una notificación local?
Es un mensaje de alerta que, al transcurrir cierto tiempo después de generarla se mostrará al usuario un mensaje de alerta, bien ya sea pues para avisar de que ya tienes de nuevo toda la energía recargada para poder seguir jugando o cualquier otro motivo que se te ocurra sin necesidad de tener que usar internet para que un servidor externo lo procese y te avise cuando sea necesario, lo calculará el mismo dispositivo partiendo de la hora actual hasta el tiempo que le digamos que tardará en mostrar esta alerta, es decir, si son las 10:00 y le decimos que nos avise en cinco minutos pues lo mostrará a las 10:05.

Aquí está el código que procederé a explicar:

using UnityEngine;
using System.Collections;
using System;

public class Notification : MonoBehaviour 
{
 #if UNITY_IPHONE

  //Añadir nueva notificación
  public void UseNotification(TimeSpan time, string title, string text)
  {
   NotificationServices.ScheduleLocalNotification(getNotification(time, title, text));
  }
  
  //Eliminar notificaciones pendientes de esta aplicación
  public void ClearNotifications()
  {
   NotificationServices.ClearLocalNotifications();
   NotificationServices.CancelAllLocalNotifications();
  }

  //Generación de la notificación local para iOS
  LocalNotification getNotification(TimeSpan time, string title, string text)
  { 
   LocalNotification notification = new LocalNotification();
   notification.alertAction = title;
   notification.fireDate = DateTime.Now.AddSeconds ((double) t.Seconds);
   notification.alertBody = text;
   notification.soundName = LocalNotification.defaultSoundName;
   return notification;
  }
 #endif
}
En primer lugar decir que, para usar este script debes de llamar desde otro componente a UseNotification para añadir una nueva notificación y a ClearNotifications para limpiar todas las pendientes, pero procederé a explicar paso a paso que queremos mostrar.

Pasemos a explicar como crear una notificación, sería tan sencillo como llamar a nuestro componente de esta manera:
  GetComponent<Notification>().UseNotification(TimeSpan.FromMinutes(5), "¡Alerta!", "¡Esto es una notificación local!");
El primer valor será el tiempo a transcurrir para la notificación, en este caso cinco minutos, el segundo valor el título de la notificación y por último el texto que queremos mostrar ampliando la información de la notificación.

Ahora veamos como limpiar nuestras notificaciones si ya no queremos que se muestren:

  GetComponent<Notification>().ClearNotifications();
Esta línea nos limpiará las notificaciones, en el caso de querer avisar de que tenemos recargada nuestra barra de energía, si volvemos a la aplicación no necesitamos que nos avise de ello ya que podemos verlo nosotros mismos mientras jugamos así que limpiaríamos las notificaciones y cuando sea necesario volveremos a crear las notificaciones necesarias.

Aunque esta clase se podría ampliar como para cambiar el sonido de la notificación por ejemplo, he querido mostrar la versión mas simple de la cual podrémos partir en nuestro proyecto, espero que sea de utilidad.

1 comentario: