Okey, pues ahora vamos a hacer que nuestra aplicación, nuestro proyecto de Android Studio, nuestra aplicación móvil que tenemos aquÃ, esta aplicación se esté comunicando hasta la base de datos, esta base de datos que tenemos aquà y que sea a través de nuestro servidor, el servidor que configuramos en el video anterior. Okey, pero antes de eso voy a hacer algunos ajustes aquÃ. Primeramente voy a hacer que este path token-device pues de alguna forma sea un poco más genérico, tokenDevice le vamos a poner URI, y vamos a hacer que sea más genérico porque probablemente bueno, lo vamos a estar ocupando en, vamos a estar ocupando esa variable más adelante. Entonces aquà you ahora simplemente coloco mi variable, aquà también la vamos a poner, tokenDevicesURI, perfecto. you está. Okey, ahora vamos a trabajar un poco más sobre la respuesta que vamos a dar. Ahorita estamos devolviendo el token que recibe es el mismo que está devolviendo, entonces vamos a trabajar sobre nuestra respuesta y para hacer esto, voy a crear una función, la función se va a llamar generarRespuesta, respuesta AT Token. Cuando recibamos el token debemos devolver algo. Okey, entonces esta función va a recibir el objeto db que es el que estamos aquà pasando, el que estamos aquà instanciando, tenemos que obtenerlo y además lo que nosotros queremos devolver en algún momento dado cuando estamos insertando registros aquà en nuestra base de datos se está creando un identificador que gracias a la función push nos crea un identificador como este, okey. Lo que nosotros queremos es también estar en alguna forma recuperando este identificador para posteriormente en futuras acciones podamos estar accesando los datos a través de él. Entonces vamos a obtener este identificador. La forma en que lo vamos a hacer o más bien el parámetro donde viene ese identificador es en, aquÃ. Okey, cuando nosotros hacemos referencia a la base de datos y le decimos el path, podemos también decirle por aquà var path, puedo decirle tokenDevices .toString, asÃ, y eso lo que me va a estar devolviendo es la dirección de mi servidor, toda esta dirección y concatenándome el identificador que le ha puesto, el identificador que le ha puesto a este registro. Entonces esta información lo que voy a hacer es que la voy a tratar un poco, y voy a hacer por ahà una función que se llama split, voy a utilizarla y voy a hacer un split sobre esto para posteriormente únicamente obtener el identificador del registro, ¿okey? Bien. Voy a poner por aquà un var pathSplit y le voy a decir que al path le haga split.split a partir del token, de esto que tenemos aquÃ, de cómo se llama nuestro path, okey, lo que sea que pongamos aquà es lo que se va a estar concatenando en este parámetro y entonces vamos a poner a partir del tokenDevicesURI acompañado de su diagonal para que nos lo parta directo. Entonces pues esto me va a dar como resultado un, esto se va a convertir en un arreglo donde por un lado toda la cadena en el registro en 0 va a ser la cadena hasta aquÃ. Okey, eso va a estar en el registro 0, y en el registro 1 voy a tener únicamente el identificador. Entonces voy a poner idAutoGenerado y eso lo voy a obtener a través del pathSplit en el registro o en el Ãndice 1, okey, en el Ãndice 1. Bien, entonces siguiendo con mi respuesta, esta respuesta lo que yo voy a estar devolviendo, pues voy a necesitar obtenerlo de la base de datos, obtener los datos de la base de datos que ahorita vamos a ver una función especial para esto. Y además voy a también quiero estar concatenando el identificador autoGenerado, entonces también lo voy a estar poniendo y bien. Entonces voy a configurar mi objeto respuesta asÃ, y a partir de un método especial o más bien un evento que ocurre, cuando voy a poner aquà variable ref de la referencia de la base de datos, cuando tú haces referencia a la base de datos, aquà vamos a poner la variable. Cuando tú haces esta referencia, entonces estás pasando pues todo el path, todo lo que compone a esta variable. Entonces lo que vamos a hacer a partir de un evento que se va a llamar child-added, nosotros a partir de esto que acaba de suceder que fue insertar un registro, nosotros podemos obtener el último registro insertado, ¿okey? Con elemento child-added podemos tener el último registro insertado y entonces lo que vamos a hacer es que los datos de ese registro insertado los vamos a devolver en un objeto JSON como estamos aquà construyendo nuestro objeto. Entonces lo que vamos a devolver por aquà será un usuario, lo voy a dejar aquÃ, simplemente voy a poner esa variable, la voy a dejar vacÃa, voy a estar devolviendo un usuario y a partir del objeto ref.on voy a colocar child-added y entonces una vez que detecta que hubo, o se añadió un hijo a la cadena JSON, a la base de datos que está en JSON, entonces por aquà va a ejecutar una función. Normalmente se recibirán dos parámetros, el parámetro que más no importa hasta los momentos es este, snapshot, porque este snapshot es como si va y le toma precisamente una foto, un snapshot a la data a lo que se acaba de insertar, y entonces en este snapshot es donde nos devuelve a partir del método .val nos devolverá la data que se acaba de insertar, ¿okey? Esto como función, esta forma que estamos colocamos, un token y le pone el token, será lo que nos estépor aquà devolviendo. Entonces nosotros vamos a decir que eso se lo asigne a nuestro objetito usuario para poder manipularlo mejor. Bien, entonces una vez que you yo tengo asignado el objeto usuario, puedo empezar you a modelar la respuesta que voy a estar otorgando. Voy a colocar aquà mi objeto respuesta y vamos a empezar a ponerle datos a ese objeto respuesta, ¿okey? Voy a decir que quiero el identificador:, ese identificador recuerda que será esta cadena que estamos extrayendo y que además estamos pasando por aquÃ, y le voy a decir que eso sea el idAutoGenerado, el token, ¿y el token de dónde lo sacaremos? Lo sacaremos de nuestro objeto usuario que contiene el snapshot de la data. Entonces voy a poner usuario.token, usuario.token, asÃ, listo. Esto es lo que voy a devolver, voy a devolver el id que se generó y el token, ¿okey? No olvides después de you hacer todo esto, hacer un return de la respuesta, ¿okey? Perfecto, you, con esto quedarÃa nuestra función generaRespuesta y esto es exactamente lo que yo quiero estar enviando como respuesta. Voy aquà a llamar a mi función, voy a llamar a mi función generarRespuestaAToken, le voy a pasar el objeto db, el idAutoGenerado, le voy a pasar el objeto db que es el que instancié por acá, para que las operaciones que yo hice aquÃ, puedan continuar en mi función y también pues el idAutoGenerado que previamente you le hice un proceso para obtenerlo. Una vez que you tengo la respuesta, esto recuerda que es este objeto JSON tiene esta composición, una vez que you le hice eso voy a colocar un header en mi objeto response que ese está en el parámetro del post, del método post y le voy a poner setHeader. Y lo que voy a hacer de qué tipo será la respuesta, ¿okey? Voy a indicar con un Content-Type, le diré que la respuesta será application/json. Okey. Esta será mi tipo de respuesta. Una vez que you tengo, you indiqué con un Header, eso es para que quien sea que vaya a recibir la respuesta, pues esté preparado y además pues todo esto se convierta muy bien en JSON. Voy a utilizar un método que proviene de JSON.stringify, stringify, stringify, Y lo que hace es que nosotros estamos definiendo un objeto estamos definiendo este objeto, es un objeto de JavaScript y lo que está haciendo con esta función es, verlo, convertirlo en un JSON, pero en un formato string, ¿okey? Lo va a convertir en un formato string y no un, de objeto lo va a pasar a string en forma, en forma de JSON. Listo, perfecto. Con esto es todo lo que tengo que hacer en mi servidor. Vamos a ver que no tengamos ningún problema. Le voy a poner aquà Implementando Respuesta a método POST. Voy a copiar estos comandos, los voy a poner aquÃ. Okey, el servidor you ha abierto, el sitio you ha abierto, ¡y perfecto! No nos está dando ningún problema. Eso quiere decir que hasta el momento todo está muy bien. Okey, lo siguiente que ahora vamos a hacer es que dejamos pendiente nuestro proyecto de Android y lo que tenemos que hacer es configurar ahora este proyecto, todos nuestros archivos de Java, habÃamos creado nuestro TokenIDService, nuestro NotificationService, y you estábamos cachando el token. Aquà está. Estábamos cachando el token cuando alguien le dé clic en recibir notificaciones. Ahora otra cosa que haremos, vamos a implementar Retrofit al proyecto para que podamos estar haciendo la solicitud a nuestro Endpoint. Okey, entonces para, lo primero que tengo que hacer para Retrofit es implementar las dos librerÃas. Todo esto lo vimos you en videos anteriores, asà que no voy a detenerme mucho. Voy a implementar las dos librerÃas, la de Retrofit y la de Gson. Bien, you terminó. Ahora voy a hacer, en mi carpeta de Java, voy a hacer un Package, un Package que se va a llamar restAPI. restAPI, listo. Bien, este Package va a tener primeramente una clase donde vamos a estar manejando todas las constantes, Constantes RestAPI. Y además vamos a hacer una interfaz donde estemos trabajando todos nuestros endpoints, ¿okey? Voy a darle una interfaz donde estemos trabajando todos nuestros endpoints. Listo. Entonces ahora en, voy a trabajar en mis constantes y lo que voy a estar definiendo en mis constantes de la RestAPI, primeramente voy a declarar esta clase, que sea final. Y voy a empezar simplemente, primero declarando la ROOT_URL. Voy a colocar public static final String. Le voy a poner ROOT_URL y esa ROOT_URL va a responder precisamente a la URL base de mi servidor, que yo en un momento you tenÃa por acá. Esta URL base. O puedes simplemente levantar el proyecto y copiar la URL que nos ha dado. Voy a copiarlo y lo pondré aquÃ. Recuerda que debe lleva la t, la diagonal, debe llevar la diagonal, y después en el punto y coma, voy a, aquà voy a duplicar la lÃnea. Ahora vamos a escribirla aquà para el post del ID_TOKEN, ¿okey? Y vamos a colocar aquà la llave con la cual responde nuestro servidor para insertar el TOKEN. Listo, you están nuestras constantes. Ahora vamos a definir, vamos a definir nuestro endpoint. Para generar nuestro endpoint necesitamos primeramente, pues ver, este, cómo es que va a ser devuelta la respuesta de nuestro servidor. Más o menos nosotros you aquà la modelamos un poco. Aquà está, esta es más o menos la respuesta, pero vamos a hacer una prueba a través de Postman Aquà tengo Postman. Voy a seleccionar el método POST, voy a poner la URL con diagonal token device. Lo voy a poner asÃ. Voy a poner en Body el parámetro token con xww, token, y vamos a poner 12345. Okey, vamos a darle send. Ahora se está devolviendo por aquà un error. Vamos a revisar nuestro log. Este es un momento, una oportunidad que tenemos para ver cómo funciona el log. Para eso tengo ahà mi comando de log, voy a darle enter, y vamos a ver qué pasó. Dice que Query.on falló. Okey, parece que aquà no está llegando lo que tengo en token-device. Vamos a manejarlo en texto, asà y vamos a correr esto. Voy a ahorrarme el open y nada más que genere el Git. Okey, vamos a revisar, nos sigue marcando un error. Ahora vamos a revisar de nuevo el log. Listo, dice que aquÃ, que el error está en la lÃnea 44 con nuestra opción stringify en lo que está recibiendo, básicamente. Vamos a revisar la lÃnea 44. Aquà está la lÃnea 44 y stringify está bien escrito, JSON. Claro, estamos enviando el objeto response y lo que nosotros debemos enviar es nuestro objeto respuesta, ¿okey? Vamos a correr esto de nuevo. you casi está. Son cosas que tenemos que, pues estar previniendo, que suelen suceder en producción y, bueno, esta es la forma en que te enseño cómo, pues, estás revisando el log para entender tus errores, a entender lo que está pasando. Okey, vamos a esperar a que termine. Listo. Vamos a hacer de nuevo nuestra prueba con Postman Y you. you está lista nuestra data. Nos está devolviendo el ID, el ID del registro que acaba de insertar. Vamos a revisar por acá nuestra base de datos y, bueno, aquà están todos los registros de los cuales estuvimos haciendo pruebas. Vamos a eliminar esta data. Asà y vamos con Postman a enviar otro registro. Y vamos a revisar aquà que esto esté bien. Esta es, esta es la llave que nos está devolviendo y sÃ, coincide perfectamente. Este es el registro que nosotros enviamos y esta es la estructura de datos que nosotros queremos devolver. Okey, entonces esa estructura de datos, si recuerdas anteriormente, debemos nosotros generar un modelo de datos un modelo de datos que va a funcionar como respuesta, ¿okey? Yo voy a colocar aquà un Package que se llame model. Y este Package va a contener una clase que va a funcionar como mi respuesta, ¿okey? Response. Y la forma en cómo yo tengo que generar esta, esta clase es, debe ser similar a lo que estoy obteniendo aquÃ. Debo tener un parámetro ID, un atributo ID y un atributo token, ¿okey? Entonces, si observas, ambos atributos, pues, vienen en strings, ¿okey? Entonces ambos tienen que ser strings también. Voy a colocar un private String Id, un private String token. Listo. Voy a generar ahora sus métodos, su método constructor para ambos datos y además voy a generar también otro constructor que esté vacÃo, que no tenga nada. Listo. Ahora voy a generar también sus Getters y Setters de ambos registros, ¡y listo! you tengo mi modelo de respuesta, mi usuario response. Eso es lo que yo necesitaba para definir mi Endpoint, ¿okey? Recuerda que para definir mi Endpoint, de Endpoint, debo definir la clase Call de Retrofit y, dentro de la clase Call, colocar el objeto respuesta, el objeto respuesta en mi método, es decir, esto que tengo aquÃ, pero pasado con Java, ¿okey? Eso lo pondremos, nuestro método, nuestro método. Le vamos a poner registrarTokenID y va a estar recibiendo con @Field voy a estar diciendo que va a estar recibiendo un parámetro que se llama Token. No va a recibir el parámetro ID porque eso es lo yo voy a estar en ese caso devolviendo, y entonces aquà va el nombre del parámetro seguido del tipo de dato que va a estar recibiendo. Token, okey, aquà ponemos punto y coma y listo. Ahora es importante colocar por aquà a través de qué método se va a estar conectando, a través del método post, y entonces debemos colocar a través de nuestra clase ConstantesRestAPI la KEY_POST_ID_TOKEN, okey. También debemos indicar que este POST vendrá en un FormUrlencoded. Recuerda que asà como lo estamos también recibiendo nuestro, en nuestro servidor, como si fuera, como si viniera encodeada en la URL, codificada en la URL. Listo, you tenemos you nuestro método registrarToken. Ahora vamos a continuar acá a ver qué más tenemos. Vamos a crear ahora nuestro adapter, okey, voy a darle clic derecho new, package, voy a crear mi adapter y mi adapter va a contener la parte de you estar instanciando, estar llamando a Retrofit y a estar colocando los parámetros del servidor. Voy a poner una clase RestAPIAdapter, voy a poner adaptador y voy a generar mi método que me va a estar devolviendo una interfaz Endpoints, y vamos a poner establecerConexionRestAPI. No va a recibir nada en este caso porque mi respuesta es idéntica a lo que tengo en mi clase. Voy a colocar aquà mi objeto Retrofit igual a new Retrofit y hacemos .Builder. Ahora vamos a empezar a poner aquà los parámetros que este será nuestra URL base y la sacaremos de las constantes y es nuestra ROOT_URL y además le diremos que la respuesta la convierta con la clase Gson, GsonConverterFactory, la convierta a un modelo de clases. Okey, y you por último damos .build. Listo, you quedó. Devolvemos nuestro objeto retrofit.create, recibirá Endpoints.class, listo. Perfecto, crea un Endpoint como el que estamos devolviendo, como es el que tenemos aquÃ. Okey, entonces you tenemos listo toda nuestra APIRest. Okey, todo esto es lo que tenemos que hacer para configurar precisamente el llamado. Vamos a nuestra clase de mainActivity donde habÃamos dejado ahà pendiente nuestro método enviarTokenRegistro, este método recuerda que reacciona a mi layout, reacciona al botón que está aquà en mi layout, cuando le da clic lanza una notificación pero en realidad lo que está haciendo aquÃ, vamos a cambiarle, vamos a poner enviarToken, ajá. Vamos a hacer que eso también esté aquà para que esté un poco más entendible lo que está sucediendo. Lo que hace es que toma el token y entonces posteriormente lo envÃa para su registro, para registrar al servidor. Entonces vamos a hacer con nuestro adaptador, vamos a decirle RestApiAdapter new, RestApiAdapter; vamos a decir que necesitamos un objeto de tipo Endpoint y con nuestro RestApiAdapter invocamos nuestro método para que establezca la conexión con el servidor, y posteriormente debemos ejecutar el método que registre el token, y recuerda que ese método nos devuelve un objeto como este, okey. Le voy a poner endpoints.registrarTokenID, y lo que irá aquÃ, nada más es el parámetro token lo que estamos obteniendo, este token que estoy obteniendo por aquÃ, que viene desde por acá lo estaré colocando en registrarToken para que lo mande a mi servidor, y aquà you está configurada la ruta y la URL donde debe ir. Vamos a hacer a enviar, vamos a enviar toda esta petición y utilizaremos, recuerda nuestro callback y en la respuesta nosotros you tenemos una clase que es idéntica a la respuesta que nos está dando. Entonces no necesitamos generar un deserializador, por lo tanto recuerda que en el objeto response a través del método body obtengo la data y esa data la asigno a mi usuario response, y bueno lo que voy a hacer nada más a continuación es imprimir esto. Me interesa conocer el ID que me está devolviendo, digo esto you podrÃas guardarlo en shared preference o no se en un archivo, en una base de datos local, digo lo que tú quieras, okey. Lo que nos importa en este momento es poder estar enviando los datos a nuestro servidor, y que este servidor nos esté respondiendo con una data y que nosotros podamos estar aquà recibiendo la data y mostrándola. Okey, perfecto,pues parece que es todo lo que tenemos que hacer, aquà me falto un punto y coma, vamos a ver que todo esté correcto. Es muy importante que como vamos a hacer una conexión al servidor, pues también en nuestro archivo android manifest coloquemos el permiso a internet que es algo que es muy común, que lleguemos a perderlo de vista y entonces, pues bueno, ten cuidado con eso. Vamos a correrlo. Vamos a ver qué pasó, vamos a correr esto. Y está a punto de correr, voy a poner aquà al frente mi emulador. [AUDIO EN BLANCO] Listo, de momento no nos ha marcado ningún error, eso para decir que está bien, eso está muy bien. Entonces vamos aquà a darle clic y perfecto. Parece ser que sà se registró, estamos obteniendo una respuesta, este es el identificador, y entonces si esto ocurrió vamos a revisar nuestra base de datos y recuerdas que aquà este era el token que nosotros insertamos a partir de Postman. Este fue el dato que mandamos, y lo que está aquà abajo, esto es el nuevo dato que estamos enviando desde nuestra aplicación. Voy a eliminar todo para ver cómo se está dando de forma, pues más dinámica. Y vamos a aquà a darle de nuevo, recibir notificación lo que va a hacer es obtener el token del dispositivo y entonces enviarlo al servidor para que el servidor lo pase a Firebase, y entonces podamos estar almacenando el token del dispositivo. Adicional puedes estar almacenando más parámetros, más cosas, aparte del token puedes almacenar no se, el usuario, un usuario, un correo electrónico, un número teléfonico como en el caso de Whatsapp y que ese número telefónico esté casado con este valor, y perfecto. Entonces una vez que you estamos enviando nuestro token, todo está funcionando a la perfección. Vamos a ver en nuestro siguiente video cómo es que podemos nosotros enviar finalmente you una notificación. Voy a hacer una simulación con dos emuladores que yo tenga sus tokens aquà registrados y entonces este emulador le mande una notificación al otro emulador, y asà viceversa, se pueden estar enviando notificaciones. Okey, entonces esto va a ser a partir de la interacción de una foto tal cual, y entonces vamos a ver cómo es que finalmente vamos nosotros a mandar la notificación desde nuestro servidor que está construido con node.js.