Notificaciones Push – Parte 2: Notificaciones push en Xamarin Forms y OneSignal

Posted on Posted in Uncategorized

TL;DR

Después de batallar 5 días tratando de mandar notificaciones con Microsoft Azure y Amazon SNS sin éxito, pude mandar notificaciones push en Xamarin Forms y OneSignal mientras escuchaba No Money de Galantis.

Google al rescate

A los días de haber fracasado con esas dos plataformas en crear notificaciones push en Xamarin Forms, decidí buscar algo diferente, una plataforma que también me dejara mandar notificaciones con una sola petición sin importar si es iOS o android.

La búsqueda de push notification services, me dio como primer resultado una página llamada OneSignal, a primera vista me percaté de que era una muy buena plataforma, sabía que había encontrado a la plataforma indicada.

Mandando notificaciones push con OneSignal

Desde que entras te das cuenta que son claros desde el principio, no hay demasiado ruido visual mucha información por todos lados como en las dos plataformas anteriores que probé, son claros que ellos te van a ayudar a enviar notificaciones push para cualquier plataforma, bajas un poco y ves que tienen soporte para más de 10 plataformas! y entre ellas está la que nos importa… Xamarin.

Bajas un poco más y te encuentras con una increíble noticia… que es totalmente gratis !!!

Hasta aquí todo va excelente, los pasos para empezar con OneSignal son:

  • Te registras o inicias sesión
  • Creas tú primer app dentro de la plataforma (la página te lleva de la mano en todos los pasos, así que no te preocupes)
  • Seleccionas que plataforma quieres configurar primero, Android en este caso
  • Te pide que metas tus llaves de la app creada en Firebase, si no sabes qué onda con Firebase, es la plataforma recomendada por Google para todo esto de servicios moviles, y algo que me gusto es que OneSignal tiene un tutorial súper sencillo de seguir para generar y sacar tus llaves
  • Seleccionas la plataforma de desarrollo, en este caso Xamarin
  • Instala el SDK y prueba la conexión, aquí vamos a hacer una pausa, para meterle mano a la solución en Xamarin

Conectando Xamarin Forms con OneSignal

OneSignal tiene un excelente tutorial para enviar notificaciones push en Xamarin Forms, o incluso puedes bajar su ejemplo, el cual también está incluido, yo, de cualquier forma lo voy a agregar a lo que ya tengo.

No voy a poner aquí todo lo que tienen que hacer, porque eso lo cubre el tutorial a la perfección, solamente escribiré los puntos que quizá no estén tan claros:

  • Para agregar un archivo como link, lo que hay que hacer es hacer dar click en la solución de android y luego en AddExisting Item, y una vez lo encuentren, verán que a un lado del botón de Add viene un triangulo para seleccionar otras opciones, y ahi seleccionan Add as Link
  • Al agregar las siguientes Nuget tenía problemas de incompatibilidad, por lo que la solución fue agregar la versión 27.0.0 de las 3, al final de cuentas es la versión que usa el ejemplo de OneSignal:
    • Google Play Services – Location 27.0.0
    • Google Play Services – Cloud Messaging (GCM) 27.0.0
    • Google Play Services – Analytics 27.0.0
  • Cuando tenga que poner el AppID en el método OnCreate del proyecto de android, se refiere al AppID de OneSignal

Al correr la app en el dispositivo no compilaba, es decir, no marcaba error, pero no corría (no todo puede ser perfecto o si?), tenía cosas que hacer, así que apague la computadora con la esperanza de que cuando regresara de mis actividades tuviera un indicio que es lo que pasaba; y asi fue.

Ahora Visual Studio Community me marcaba un error del tipo OutOfMemoryError (o algo así) y por suerte Jonathan Pryor de  Xamarin compartio la solucion, la cual es:

reemplazar
<JavaMaximumHeapSize />

por
<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>

En el archivo de solución del proyecto de android y LISTO!, ya tenía corriendo la app en mi Moto Z.

Si le damos click en revisar los dispositivos conectados, nos aparecerá algo así

Dispositivo subscrito a las notificaciones
Dispositivo subscrito a las notificaciones

Después enviamos una notificación de prueba:

 

Enviar notificacion desde OneSignal
Enviar notificacion desde OneSignal

 

Y si la app está abierta las recibiremos como un mensajes de android normal, pero si está cerrada, las recibiremos como notificaciones push en Xamarin Forms:

Notificacion de OneSignal recibida en Android con Xamarin Froms
Notificacion de OneSignal recibida en Android con Xamarin Forms