sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo usar MongoDB Stitch en aplicaciones de Android

Con MongoDB Atlas, todo lo que se necesita son unos pocos clics en el navegador para poner en marcha su propio clúster MongoDB en la nube. Al usarlo, puede crear aplicaciones de Android e iOS que pueden servir a millones de usuarios de manera eficiente. Sin embargo, aún necesitaría un servidor back-end que pueda actuar como intermediario entre los dispositivos de sus usuarios y su clúster. Lo necesitaría para hacer cumplir las políticas de seguridad, agregar un nivel de abstracción a sus operaciones CRUD, programar trabajos y muchas otras tareas importantes.

  • MongoDBCree un clúster de base de datos en la nube con MongoDB AtlasAshraff Hathibelagal

MongoDB Stitch es una poderosa plataforma sin servidor que puede cumplir con todos sus requisitos de back-end. Además de proporcionar un control de acceso detallado a los datos en su clúster de MongoDB Atlas, ofrece un entorno informático basado en JavaScript que puede utilizar para realizar una amplia variedad de operaciones del lado del servidor. En este tutorial, te mostraré cómo usar la plataforma en una aplicación de Android.

Requisitos

Para seguir, necesitarás:

  • una cuenta de MongoDB Atlas
  • la última versión de Android Studio
  • un dispositivo o emulador con Android 5.0 o superior

1. Crear un clúster de MongoDB Atlas

MongoDB Stitch está diseñado para usarse con un clúster de MongoDB Atlas. Puede usar un clúster que ya tiene, pero le sugiero que cree uno nuevo para este tutorial.

Comience iniciando sesión en su cuenta de MongoDB Atlas y presionando Crear un nuevo clúster botón.

En la siguiente pantalla, que le solicita los detalles de configuración de su nuevo clúster, elija cualquier proveedor de nube, una región que ofrezca un clúster de nivel gratuito M0 y presione Crear clúster. botón.

Después de unos minutos, tendrá un nuevo clúster de nivel gratuito llamado Cluster0 .

2. Crear una aplicación de puntada MongoDB

Para asociar una aplicación de Stitch con su clúster, haga clic en Aplicación de enlace Enlace. En la página que se abre a continuación, presione Crear nueva aplicación botón.

Ahora puede escribir el nombre que desea para su nueva aplicación Stitch. Después de hacerlo, asegúrese de seleccionar el clúster correcto y presione el botón Crear. botón.

En este punto, su aplicación Stitch, con cuotas gratuitas muy generosas, está lista.

La aplicación tiene una identificación única que necesitará mientras desarrolla su aplicación de Android. Puede ver de qué se trata yendo a Clientes y abriendo la sección Java (Android) pestaña.

3. Configurar usuarios y reglas

Mediante el uso de MongoDB Stitch, puede escribir de forma segura código front-end web y móvil para interactuar con su clúster de MongoDB Atlas. Esto es posible porque no tendrá que incluir una cadena de conexión que contenga la dirección del servidor, el nombre de usuario y la contraseña de su base de datos en su código.

Los usuarios finales autenticados de su aplicación Stitch obtienen automáticamente acceso a su base de datos. Sin embargo, utilizando una o más reglas, puede controlar con precisión qué documentos y campos pueden ver o modificar.

Para autenticar a sus usuarios, Stitch ofrece varios mecanismos de autenticación, incluida la autenticación anónima, la autenticación por correo electrónico/contraseña y la autenticación mediante proveedores de identidad federados populares. En este tutorial, utilizaremos la autenticación anónima. Para configurarlo, vaya a Usuarios y abra la sección Proveedores pestaña.

A continuación, seleccione Permitir que los usuarios inicien sesión de forma anónima opción, actívala y presiona el botón Guardar botón.

Digamos que queremos permitir que nuestros usuarios anónimos trabajen solo con los documentos que poseen. Para crear una regla de este tipo, vaya a Reglas sección.

Debido a que las reglas se aplican a las colecciones, presione Agregar colección botón para crear una nueva colección ahora. En el formulario que aparece, asígnele un nombre y especifique a qué base de datos debe pertenecer. Después de hacerlo, seleccione Los usuarios solo pueden leer y escribir sus propios datos plantilla de reglas.

Al seleccionar la plantilla, se le pedirá que especifique el nombre del campo en su documento en el que almacenará la ID de autenticación de Stitch generada automáticamente por el usuario. Stitch usará este campo para decidir si un documento pertenece a un usuario o no. Diga que el nombre es user_id y envíe el formulario.

En la página que se abre a continuación, ahora puede confirmar que solo los propietarios de los documentos de su colección pueden realizar operaciones de lectura y escritura en ellos.

4. Preparar Proyecto Android

Para poder usar Stitch en su proyecto de Android Studio, debe agregar su SDK oficial como implementation dependencia en tu app build.gradle del módulo archivo.

implementation 'org.mongodb:stitch-android-sdk:4.0.5'

Además, debe mencionar la identificación única de su aplicación Stitch en su proyecto. Así que ve a res/values/strings.xml y agréguelo como <string> etiqueta.

<string name="my_app_id">mystitchapp-qwern</string>

5. Establecer una conexión

Con una instancia de StitchAppClient clase, puede utilizar fácilmente todas las funciones que ofrece la plataforma Stitch. Para inicializar, inicialice StitchAppClient , debe llamar al initializeDefaultAppClient() y pásele el ID de su aplicación Stitch. Esto debe hacerse solo una vez en su aplicación, preferiblemente tan pronto como comience.

Una vez que esté listo, puede llamar al getDefaultAppClient() método para obtener una referencia al cliente. El siguiente código, que puede agregar al onCreate() de su actividad método, le muestra cómo:

Stitch.initializeDefaultAppClient(
    resources.getString(R.string.my_app_id)
)

val stitchAppClient = Stitch.getDefaultAppClient()

A menos que su usuario haya iniciado sesión en su aplicación Stitch, no podrá realizar ninguna operación útil en su clúster de MongoDB Atlas. Por lo tanto, ahora debe iniciar la sesión del usuario llamando al loginWithCredential() método, que se ejecuta de forma asíncrona y devuelve una Task objeto. Además, debido a que eligió la autenticación anónima como mecanismo de autenticación en la consola web de Stitch, asegúrese de pasar una instancia de AnonymousCredential clase al método.

stitchAppClient.auth.loginWithCredential(AnonymousCredential())
        .addOnSuccessListener { 
            // More code here
        }

En este punto, si ejecuta la aplicación, Stitch lo registrará automáticamente como un nuevo usuario y también lo iniciará en la aplicación. Además, si vuelves a la consola web de Stitch y abres Usuarios sección, podrá ver que se ha agregado una nueva entrada a la lista de usuarios.

6. Insertar documentos

Después de una autenticación exitosa, puede continuar y obtener una instancia de RemoteMongoClient class para comenzar a interactuar con su clúster de MongoDB Atlas. Para hacerlo, puede llamar a getServiceClient() método y especifique que el nombre del servicio que desea es "mongodb-atlas ". He aquí cómo:

val mongoClient = stitchAppClient.getServiceClient(
                    RemoteMongoClient.factory,
                    "mongodb-atlas"
                  )

Recuerde que, gracias a la regla que creó anteriormente en este tutorial, su usuario solo puede realizar operaciones de lectura y escritura en sus propios datos. Además, su usuario está limitado a trabajar solo con la base de datos y la colección que mencionó en la consola web de Stitch.

Para obtener una referencia a la base de datos, llame a getDatabase() método y pasarle su nombre. De manera similar, para obtener una referencia a la colección, llame a getCollection() método, que devuelve una RemoteMongoCollection objeto.

val myCollection = mongoClient.getDatabase("test")
                              .getCollection("my_collection")

Lo que agregue a la colección depende, por supuesto, de usted. Por el bien de un ejemplo, digamos que queremos agregar documentos que contengan marcas de tiempo de todas las horas en que el usuario abrió la aplicación.

Para crear un nuevo documento BSON, debe usar el constructor del Document clase. Porque Document los objetos son muy similares a los mapas, puedes usar el [] operador para agregarles pares clave-valor.

El siguiente código le muestra cómo crear un nuevo documento y agregarle una marca de tiempo:

val myFirstDocument = Document()
myFirstDocument["time"] = Date().time

Además de sus datos, todos sus documentos deben contener el ID de autenticación de Stitch del usuario. Sin él, sus operaciones de inserción fallarán. Para obtener el ID de autenticación, puede usar directamente el id propiedad del implícito it objeto disponible dentro del oyente en caso de éxito.

myFirstDocument["user_id"] = it.id

Ahora puede insertar el documento llamando a insertOne() método. (Puedes leer sobre insertOne() y otras operaciones de escritura en la documentación de MongoDB para el controlador de Java). Debido a que se ejecuta de forma asíncrona, necesitará otra escucha en caso de éxito para verificar si la operación de inserción se realizó correctamente.

myCollection.insertOne(myFirstDocument)
            .addOnSuccessListener {
                Log.d("STITCH", "One document inserted")
            }

Si ejecuta la aplicación ahora y verifica el Logcat de Android Studio panel, debería poder ver una entrada de registro similar a esta:

7. Ejecutar Consultas

Llamando al find() método de su RemoteMongoCollection objeto, puede crear una consulta. (Puede obtener más información sobre find() y otras operaciones de consulta en la documentación del controlador MongoDB Java). El método devuelve un RemoteFindIterable objeto, en el que puede llamar a más métodos como sort() y limit() para gestionar los resultados de la consulta. Por ejemplo, el siguiente código crea una consulta para encontrar los últimos cinco documentos creados por el usuario:

val query = myCollection.find()
                        .sort( Document("time", -1) )
                        .limit(5)

Para ejecutar realmente la consulta, puede llamar a su into() método, que espera una lista como argumento. Como su nombre indica, carga los resultados de la consulta, que no son más que Document objetos, en la lista que le pasas. Se ejecuta de forma asincrónica, por lo que puede comenzar a usar la lista solo dentro de un oyente en caso de éxito.

val result = mutableListOf<Document>()

query.into(result).addOnSuccessListener {
    // More code here    
}

Por ahora, para mantener las cosas simples, usemos un TextView widget para mostrar los resultados de la consulta. Por lo tanto, agregue el siguiente código al archivo XML de diseño de su actividad:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/viewer"
    />

De vuelta dentro del oyente en caso de éxito, ahora puede recorrer la lista y crear una cadena concatenada que contenga todas las marcas de tiempo. Opcionalmente, puede pasar las marcas de tiempo a getRelativeDateTimeString() método de DateUtils class para hacerlos más legibles. Una vez que la cadena esté lista, puede asignarla directamente a TextView artilugio. Así es como:

val output = StringBuilder("You opened this app: \n\n")

// Loop through the results
result.forEach {
    output.append(
        DateUtils.getRelativeDateTimeString(
            this@MainActivity,            
            it["time"] as Long, // Get value of 'time' field
            DateUtils.SECOND_IN_MILLIS,     
            DateUtils.WEEK_IN_MILLIS,
            0
        )
    ).append("\n")
}

// Update the TextView
viewer.text = output

Si vuelve a ejecutar la aplicación, ahora debería ver algo como esto en su dispositivo: