Bueno, pues si you estamos enviando nuestras notificaciones a través del portal de Firebase, a continuación lo que vamos a hacer es que estaremos, vamos a tratar de recuperar el id, el token del dispositivo. La forma en como estará trabajando es que este dispositivo irá a Firebase y para registrarse y Firebase le regresará un token, un identificador para este dispositivo. Entonces es muy sencillo hacer esto, si vamos al proyecto en el cual estábamos basándonos, el proyecto que está en los samples de Firebase, si vamos ahí en la parte de android estuvimos trabajando con esta clase MyFirebaseMessagingService, y esto es para un servicio que recibe un mensaje, una notificación desde la consola de Firebase. Lo que nosotros tenemos que hacer es, además de esto dejar un servicio corriendo en nuestro teléfono pero este servicio ahora lo que hará será obtener un identificador para este dispositivo. Entonces vamos a abrir esa clase, y lo primero que vemos es que en este momento pues, aquí está mi clase y está heredando de la clase FirebaseInstanceIdService. Una vez que nosotros heredamos de esta clase, pues estaremos sobreescribiendo el método onTokenRefresh el cual estará pues todo el tiempo asignándonos un token o actualizando un token y donde se hace esta magia de ir a Firebase y registrar el dispositivo y que Firebase nos regrese el identificador o el token, es a partir de esto que está aquí, FirebaseInstanceId y esta clase you sabe a dónde tiene que ir, you tiene asignada la aplicación y además sabe que tiene que recurrir también a nuestro archivo donde tenemos toda la configuración, nuestro archivo google-services.json. you no tenemos que por un lado estar registrando el número del proyecto, y estar mandándolo a Google Plus Messaging como era anteriormente, con este archivo google-services.json nos ahorra muchísimo trabajo y como vemos en una sola línea de código you estamos registrando nuestro teléfono en Firebase, FirebaseCloudMessaging nos está devolviendo un token. Después de eso de que you tenemos ese token, bueno you nosotros podemos hacer lo que querramos, ¿no? Y precisamente pues aquí se está cachando un método o más bien se está declarando un método que dice send, enviar a registración, enviar el registro a un servidor, y es exactamente lo que nosotros queremos hacer. Lo que nosotros queremos hacer es de alguna forma estos tokens o estos ids identificadores de dispositivos, nosotros queremos almacenarlos en una base de datos propia. Es decir queremos que por ejemplo si alguien está dando like en alguna foto, pues nosotros poder tener el identificador del dispositivo para a partir de eso, ese identificador asociarlo a una cuenta de Instagram, que es lo que hemos trabajado con nuestra aplicación de Petagram. Entonces si yo tengo una cuenta de Petagram asociada con el identificador del dispositivo, yo voy a poder estar si alguien me da like, yo puedo mandar una notificación solamente a ese dispositivo de la cual le dieron like a esa cuenta por ejemplo, ajá, o a los dispositivos donde tenga configurada esa cuenta de Petagram o de Instagram. Entonces precisamente eso es lo que en un video posterior haremos en nuestro método send, enviar a registro para el servidor, para poder estar asignando ese token a un identificador cualquiera. En este caso pues te ponemos de ejemplo Instagram pero tú podrías asociarla a una cuenta de correo electrónico o a un usuario o a tu segmento de tus usuarios que tú prefieras, la forma en que prefieras. Y por eso hacemos esto para que puedas tener flexilibidad y puedas tener un completo control, ¿okey? Entonces para no depender tanto de esta plataforma Firebase, que sí nos ayuda hasta cierto punto pero en algún momento you no nos da el ancho para hacer todo lo que nosotros quisiéramos hacer. Entonces precisamente vamos a obtener, vamos a empezar a trabajar nuestro proyecto, y voy a cambiarme aquí a la vista de android, y voy a comenzar a declarar mi clase, voy a dar clic derecho new Java class, le voy a poner NotificacionIDTokenService, okey, porque esta clase servirá para estar obteniendo el token, o el identificador del dispositivo, ahí está, IDService, perfecto. Voy a hacer esto un poco más grande y el método que vamos a estar sobreescibiendo es el método onTokenRefresh, este es el método. Bien, y como vimos hace un momento con una línea de código yo puedo estar cachando el token, aquí le vamos a poner token, vamos a decir FirebaseInstanceId get.getToken. Listo, esta línea de código hace toda nuestra magia. Automáticamente con este proceso internamente va a consultar el número del proyecto, va a Firebase, que el proyecto coincida con lo que le está enviando y entonces registra nuestro dispositivo y le devuelve un token de acceso, un identificador. Vamos a declarar nuestro método, vamos a ponerle enviarTokenRegistro, y este método es lo que hará la parte de estar enviando una vez que you obtengamos el token, este método estará enviando el token a nuestro servidor, que en nuestro siguiente estaremos viendo cómo configurar nuestro servidor. Entonces ese método lo voy a llamar aquí, le pasaré el token y yo puedo por acá estar mostrando algunos logs para poder identificar que todo se de perfectamente. Igualmente vamos a manejar por acá arriba una TAG y esta TAG nos va a ayudar a identificar básicamente pues nuestra etiqueta, ¿no? Le vamos a poner FIREBASE_TOKEN, así. Bien, entonces ponemos nuestra TAG, y el token que estamos mostrando, que estamos recibiendo aquí. Perfecto, una vez que you tenemos nuestro servicio configurado, you está perfecto, tenemos que darlo de alta ahora en nuestro archivo android manifest, okey. Así de la misma forma a como dimos de alta el servicio anterior, de esa misma forma básicamente vamos a hacer un copy paste, voy a darle clic derecho, copiar y de nuevo clic derecho pegar, listo. En vez de estar trayendo esa notificacion service, ahora traeremos NotificacionIdTokenService y otra modificación que haremos será sobre nuestro intent filter que en vez de poner messaging, colocaremos INSTANCE_ID_EVENT, okey. Debemos asegurarnos que lo estamos escribiendo completamente igual, eso es muy importante. Y listo, you se ve, ahí está perfecto. Ahora tenemos nuestro servicio. you tenemos nuestro servicio definido, you lo hemos declarado en el android manifest, ahora vamos a llamar a nuestro servicio, okey. De acuerdo a la interfaz que tenemos por aquí, por aquí está nuestra interfaz, nosotros tenemos este botón que dice lanzarNotificación. Hasta ahorita ese botón tiene asociado este método, en mi archivo main activity, ahí se puede observar y básicamente lanza una notificación loca, okey. Este código you yo lo tengo implementado cuando escribamos un mensaje. Entonces voy a quitarlo, lo voy a borrar, vamos a modificar el texto del botón. Vamos a nuestro archivo strings y en vez de lanzarNotificacion, vamos a nuestro layout acá, okey, vamos a dar de alta otro recurso antes de lanzarNotificacion colocaremos recibir_notificaciones, okey. Listo, voy a dar alt enter y recibir notificaciones, ahí está, enter, listo. Si vemos la vista de diseño, Si en algún momento les muestra ese mensaje de rendering problems, pueden solucionarlo simplemente cambiando el API de vista, y listo, you está, recibir notificaciones. Entonces si lo que quiero es recibir notificaciones al momento de yo estar dándole clic a ese botón, pues vamos a revisar un poco la documentación. Iremos a nuestro main activity del proyecto que estamos mostrando y básicamente aquí, él también está trabajando con dos botones, un botón para hacer login y entonces si nosotros queremos obtener el token al momento de dar clic, pues tenemos que llamar a la instancia y solicitar de nuevo el token, okey. Entonces vamos aquí a llamar a esa instancia y vamos a estar mostrando, listo. Voy a colocarle log.d, vamos a poner TOKEN, token. Esto solo así en el momento que yo de clic en mi botón, pues yo quiero que en ese momento me obtenga un token y entonces yo podría además también aquí vamos a quitar este, yo podría llamar también a mi método enviar y bueno ejecutar exactamente lo mismo que en la cuestión del servicio. Okey, podría manejarlo como un servicio o podría estarlo manejando como simplemente solicitar la instancia cuando en el momento en el que yo pulse, solicitar notificaciones. Vamos a correr esto, vamos a correrlo en nuestro emulador, listo. Pues hasta el momento por aquí, este es el log, como observas gracias al servicio que estamos ejecutando, estamos cachando you un token dado que el servicio se está iniciando automáticamente, you estamos cachando un token, podemos estarlo actualizando cada vez que le demos aquí recibir. Claro, nos faltó llamar al método aquí, entonces lo corremos de nuevo. Voy a limpiar esto, está sucediendo lo mismo, por aquí estoy cachando un token, aquí está uno que es el que responde al servicio, el servicio que estoy ejecutando, pero yo puedo también solicitar un token, aquí está, a partir de darle clic a mi botón. Vamos a revisar que los tokens, vamos aquí a copiar esto para revisar que los tokens pues, a ver si coinciden, este es el token que estoy recibiendo, aquí está, y vamos a revisar el otro. Parecen exactamente iguales, aquí está, como observas son exactamente iguales, okey. Es el mismo token, simplemente al lanzar, al darle clic de nuevo en recibir notificaciones, simplemente estamos obteniendo el token y ahora simplemente lo estoy enviando. Yo podría ahorrarme este paso para que no se esté mandando dos veces y entonces quitar este método de aquí, esa llamada, ese método, y simplemente cuando yo le de clic aquí, en ese momento entonces sí envía el token al servidor. Okey, ponemos ambos casos para que observes que un token se puede recuperar cuando una aplicación empieza a correr. Okey, entonces y que además que un token se puede recuperar cuando alguien le de clic para habilitar las notificaciones y en ese momento esas notificaciones you se envía el registro al servidor, entonces you quedas dado de alta en el servidor, y you eres acreedor a recibir notificaciones. Bien, entonces esto era el objetivo de nuestro ejercicio, recibir este token. Vamos a ver cómo configurar ahora nuestro servidor para estar enviando este identificador y que el servidor procese y esté trabajando con algo muy interesante, está trabajando con el almacenamiento de Firebase. Estaremos trabajando como base de datos central, precisamente de nuestro proyecto Petagram estaremos trabajando sobre el servicio de Firebase de Database Realtime Database. Entonces vamos a hacer que nuestro servidor esté aquí insertando datos en nuestra base de datos de Firebase de nuestro proyecto, para posteriormente recuperar los datos y entonces enviarlos a través de una notificación al dispositivo acordado. Okey, veamos en nuestro siguiente video.