El objetivo de Firebase es ayudar a los desarrolladores a crear mejores aplicaciones y convertirlas en negocios exitosos. Al cuidar el back-end o la infraestructura de su aplicación, Firebase le permite concentrarse en resolver problemas para sus usuarios. Una de las nuevas características interesantes anunciadas en la conferencia Google Cloud Next '17 de marzo para Firebase fue Cloud Functions. En este tutorial, aprenderá acerca de esta nueva característica al crear una aplicación de Android simple con ella.
Las funciones de la nube de Firebase se ejecutan en un entorno Node.js alojado, privado y escalable donde puede ejecutar el código JavaScript. Simplemente crea funciones reactivas que se activan cada vez que ocurre un evento. Las funciones de la nube están disponibles tanto para Google Cloud Platform como para Firebase (se crearon sobre las funciones de Google Cloud).
Por ahora, Cloud Functions admite los siguientes desencadenantes que puede escuchar y responder:
Así que ahora ha visto la gama de capacidades que pueden ofrecer las Funciones de la Nube. Pero ¿por qué usarlos??
La ejecución y configuración de un back-end y los servidores pueden ser una verdadera molestia, tiene que manejar problemas como la escalabilidad y la escritura de código en los idiomas del lado del servidor, pero con las Funciones de la Nube, esta complejidad se reduce. Además, las tareas de computación intensiva se pueden realizar en la nube en lugar de en el dispositivo cliente (como el cambio de tamaño de la imagen para cargar o escribir en varias rutas de su base de datos). Su código también será más seguro en la nube que en el dispositivo cliente, por lo que puede almacenar de manera segura datos como claves secretas en su servidor..
En este tutorial, aprenderá a usar los activadores de base de datos en tiempo real que se activarán cuando ocurra un evento de escritura en la base de datos. Luego, veremos cómo usar el servicio de mensajería en la nube de Firebase para enviar una notificación a los dispositivos suscritos a un tema. Vamos a crear una aplicación simple llamada Alertas Tutsplus, que enviará una notificación a los suscriptores del tema "android" cuando haya un nuevo artículo disponible.
Para seguir este tutorial, debes estar familiarizado con:
Y deberías tener instalado Node.js en tu computadora.
Consulte los siguientes tutoriales aquí en Envato Tuts + si necesita ayuda para comenzar a utilizar Firebase:
Ahora que los requisitos previos están configurados, descarguemos Funciones de la nube.
Para comenzar a usar las Funciones de la Nube, necesitamos que la CLI (interfaz de línea de comandos) de Firebase esté instalada desde npm. Si ya tiene un nodo configurado en su máquina, puede instalar Cloud Functions con:
npm install -g firebase-tools
Este comando instalará la CLI de Firebase globalmente junto con las dependencias necesarias de Node.js.
Para inicializar tu proyecto:
inicio de sesión de firebase
para iniciar sesión en Firebase a través del navegador y autenticar la herramienta CLI.funciones de inicio de base de fuego
de ese nuevo directorio. Esta herramienta le da una opción para instalar dependencias con NPM. Es seguro rechazar si desea administrar las dependencias de otra manera.Después de que estos comandos se completen con éxito, la estructura de su proyecto se ve así:
uso de base de fuego
.Para desarrollar nuestra sencilla aplicación Tutsplus Alerts, solo necesitamos dos módulos de nodo: Funciones de nube y módulos de SDK de administración (estos módulos ya están instalados para nosotros). Así que ve a la index.js y requiere estos módulos, y luego inicializa una instancia de la aplicación de administración.
var functions = require ('firebase-functions'); var admin = require ('firebase-admin'); admin.initializeApp (functions.config (). firebase);
Ahora que los módulos necesarios para nuestro proyecto se han importado e inicializado, codifiquemos nuestra función de nube en el index.js expediente. Como se dijo anteriormente, vamos a escribir una función que se activará cuando un onWrite ()
El evento ocurre en nuestra base de datos en tiempo real de Firebase y luego, en respuesta, enviará una notificación (un mensaje posterior) a los suscriptores del dispositivo..
// ... exports.sendNotification = functions.database.ref ('/ articles / articleId') .onWrite (event => // Capture el valor actual de lo que se escribió en la base de datos en tiempo real. Var eventSnapshot = event.data ; var str1 = "El autor es"; var str = str1.concat (eventSnapshot.child ("author"). val ()); console.log (str); var topic = "android"; var payload = data: title: eventSnapshot.child ("title"). val (), author: eventSnapshot.child ("author"). val (); // Enviar un mensaje a los dispositivos suscritos al tema provisto. return admin.messaging () .sendToTopic (topic, payload) .then (function (response) // Consulte la documentación de referencia de MessagingTopicResponse para // los contenidos de la respuesta. console.log ("Mensaje enviado con éxito:", response);) .catch (función (error) console.log ("Error al enviar el mensaje:", error);););
En el código anterior, estamos escuchando la ruta de la base de datos. / articles / articleId
, dónde ID del artículo
representa el id del artículo que fue escrito con éxito. Ahora, lo que realmente nos preocupa es la información que se escribió. Para conseguir eso, usamos event.data
, que es una interfaz estática de DeltaSnapshot.
Luego, agregue los datos de esta instantánea a la carga útil de un mensaje y envíelos al tema "android". El código asíncrono se simplifica con promesas de JavaScript..
Tenga en cuenta que en el código anterior, escribimos a la consola utilizando console.log ()
, Lo que nos ayudará en la depuración y seguimiento. Podemos ver este registro en nuestro panel de Firebase o mediante la línea de comandos con:
funciones de base de fuego: registro
Tenga en cuenta que, como esto se ejecuta en Node.js, puede instalar otros módulos disponibles desde NPM. También puede codificar JavaScript ES6 o TypeScript en lugar de JavaScript vainilla.
Vamos a implementar nuestra función de nube. Ejecute este comando para la implementación:
$ firebase despliegue - solo funciones
Ahora podemos codificar la aplicación de Android que se suscribirá al tema, escribir en la base de datos en tiempo real y recibir una notificación cuando los datos se escriban en nuestra base de datos en tiempo real, es decir, cuando se ejecutaría nuestra función de nube.!
Primero, inicie Android Studio y cree un nuevo proyecto "TutsplusAlerts"con una actividad vacía llamada Actividad principal
.
Para seguir adelante, asegúrese de haber integrado Firebase en su aplicación.
Agregue la siguiente dependencia a su construir.gradle expediente:
compile 'com.google.firebase: firebase-database: 10.2.1'
Asegúrate de sincronizar tu proyecto después de agregarlo.
Vamos a modelar una entidad de artículo para que sea persistida en nuestra base de datos en tiempo real.
Artículo de clase pública título de la cadena pública; autor de cuerdas pública; Artículo público () // Constructor predeterminado requerido para llamadas a DataSnapshot.getValue (Article.class) Artículo público (título de la cadena, autor de la cadena) this.title = title; this.author = autor;
Nuestro diseño XML para la actividad principal tendrá solo dos. EditTexts
Y solo un botón que enviará el nuevo artículo..
Ahora vamos a escribir a la ruta de la base de datos en tiempo real. /artículos/
.
// ... @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); base de datos FirebaseDatabase final = FirebaseDatabase.getInstance (); final EditText titleEditText = (EditText) findViewById (R.id.et_title); final EditText authorEditText = (EditText) findViewById (R.id.et_author); Button submitButton = (Button) findViewById (R.id.btn_submit); submitButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Vista de vista) DatabaseReference myRef = database.getReference ("articles"). push (); Artículo artículo = Nuevo artículo (titleEditText.getText (). .String (), authorEditText.getText (). toString ()); myRef.setValue (article);); //…
Su aplicación necesitará acceso de escritura a la base de datos. Solo para fines de demostración, puede configurar sus Reglas de seguridad para permitir todas las lecturas y escrituras. En una aplicación real, nunca querría usar una configuración de seguridad tan insegura.
"rules": ".read": "true", ".write": "true"
Puede obtener más información sobre las Reglas de seguridad de Firebase en mi publicación aquí en Envato Tuts+.
En esta etapa, podemos probar la aplicación y ver si nuestra función de nube se ejecutó correctamente. Ingrese un título y autor, y luego haga clic en el botón enviar. Después de eso, visite el Funciones Panel de control y ver los registros. Nuestro registro personalizado debe aparecer.
En los registros anteriores, vemos que hemos ejecutado con éxito nuestra función de nube y hemos enviado un mensaje con una carga útil a los dispositivos suscritos al 'androide'tema, pero ningún dispositivo se ha suscrito al tema todavía. En la siguiente sección, usaremos Firebase Cloud Messaging para que los dispositivos puedan suscribirse a un tema y luego procesen el mensaje entrante del servidor para mostrar una notificación..
Incluya la dependencia de Firebase Messaging en su construir.gradle archiva y sincroniza tu proyecto después:
compile 'com.google.firebase: firebase-messaging: 10.2.1'
Necesitamos crear un servicio que extienda FirebaseMessagingService y anule el onMessageReceived
devoluciones de llamada.
paquete com.chikeandroid.tutsplusalerts; importar com.google.firebase.messaging.FirebaseMessagingService; importar com.google.firebase.messaging.RemoteMessage; importar android.app.NotificationManager; importar android.app.PendingIntent; importar android.content.Context; import android.content.Intent; importar android.media.RingtoneManager; importar android.net.Uri; importar android.support.v4.app.NotificationCompat; clase pública MyFirebaseMessagingService extiende FirebaseMessagingService @Override public void onMessageReceived (RemoteMessage remoteMessage) // Compruebe si el mensaje contiene una carga útil de datos. if (remoteMessage.getData (). size ()> 0) showNotification (remoteMessage.getData (). get ("title"), remoteMessage.getData (). get ("author")); // Compruebe si el mensaje contiene una carga útil de notificación. if (remoteMessage.getNotification ()! = null) showNotification void privado (String title, String author) Intent intent = new Intent (this, MainActivity.class); intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity (esto, 0 / * Código de solicitud * /, intención, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri = RingtoneManager.getDefaultUri (RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder (this) .setContentTitle ("New Article:" + title) .setSmallIcon (R.mipmap.ic_launcher) .setContentText ("By" + autor) .setAutoCancel (true) .setSound (defaultSoundUri) ) .setContentIntent (pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); notificationManager.notify (0 / * ID de notificación * /, notificationBuilder.build ());
En el código anterior, también obtenemos la carga útil de datos y la mostramos en una notificación, independientemente de si la aplicación se encuentra en primer plano o en segundo plano..
Actualice el archivo de manifiesto, incluido el servicio creado anteriormente dentro del
etiqueta.
//…//…
Finalmente, debemos suscribirnos al tema 'androide'para que el dispositivo pueda recibir y procesar mensajes enviados a ese tema.
/ ... @Override protected void onCreate (Bundle savedInstanceState) // ... FirebaseMessaging.getInstance (). SubscribeToTopic ("android"); //… //…
Ejecute la aplicación por segunda vez e ingrese un título y un autor, y luego haga clic en el botón Enviar. Esta vez, se mostrará una notificación cada vez que un usuario de la aplicación publique un nuevo artículo en la base de datos..
Para hacer esto antes de Cloud Functions, habría necesitado un servidor HTTP o XMPP, lo que significaría más código para escribir, así como un servidor para configurar y admitir.
En este tutorial, aprendió sobre las funciones de la nube para Firebase: qué son, por qué podría necesitarlas y cómo comenzar a usar las funciones de la nube para su aplicación. Tenga en cuenta que Cloud Functions for Firebase aún se encuentra en versión beta pública en el momento de esta publicación..
Para obtener más información sobre Cloud Functions for Firebase, consulte la documentación oficial. Y mientras tanto, echa un vistazo a algunos de nuestros otros cursos y tutoriales sobre el desarrollo de aplicaciones para Android!