MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment utiliser MongoDB Stitch dans les applications Android

Avec MongoDB Atlas, il suffit de quelques clics dans le navigateur pour que votre propre cluster MongoDB soit opérationnel dans le cloud. En l'utilisant, vous pouvez créer des applications Android et iOS qui peuvent servir efficacement des millions d'utilisateurs. Cependant, vous aurez toujours besoin d'un serveur principal pouvant servir d'intermédiaire entre les appareils de vos utilisateurs et votre cluster. Vous en auriez besoin pour appliquer des politiques de sécurité, ajouter un niveau d'abstraction à vos opérations CRUD, planifier des tâches et pour de nombreuses autres tâches aussi importantes.

  • MongoDBCréez un cluster de bases de données dans le cloud avec MongoDB AtlasAshraff Hathibelagal

MongoDB Stitch est une puissante plate-forme sans serveur qui peut répondre à toutes vos exigences en matière de back-end. En plus de fournir un contrôle d'accès précis aux données de votre cluster MongoDB Atlas, il offre un environnement de calcul basé sur JavaScript que vous pouvez utiliser pour effectuer une grande variété d'opérations côté serveur. Dans ce tutoriel, je vais vous montrer comment utiliser la plateforme dans une application Android.

Prérequis

Pour suivre, vous aurez besoin :

  • un compte MongoDB Atlas
  • la dernière version d'Android Studio
  • un appareil ou un émulateur exécutant Android 5.0 ou une version ultérieure

1. Créer un cluster Atlas MongoDB

MongoDB Stitch est destiné à être utilisé avec un cluster MongoDB Atlas. Vous êtes libre d'utiliser un cluster que vous avez déjà, mais je vous suggère d'en créer un nouveau pour ce tutoriel.

Commencez par vous connecter à votre compte MongoDB Atlas et appuyez sur Construire un nouveau cluster bouton.

Dans l'écran suivant, qui vous demande des détails de configuration sur votre nouveau cluster, choisissez n'importe quel fournisseur de cloud, une région qui offre un cluster de niveau gratuit M0, et appuyez sur Créer un cluster bouton.

Après quelques minutes, vous aurez un tout nouveau cluster de niveau gratuit nommé Cluster0 .

2. Créer une application MongoDB Stitch

Pour associer une application Stitch à votre cluster, cliquez sur le bouton Lier l'application lien. Dans la page qui s'ouvre ensuite, appuyez sur Créer une nouvelle application bouton.

Vous pouvez maintenant saisir le nom que vous souhaitez pour votre nouvelle application Stitch. Après cela, assurez-vous que le bon cluster est sélectionné et appuyez sur Créer bouton.

À ce stade, votre application Stitch, avec des quotas gratuits très généreux, est prête.

L'application possède un identifiant unique dont vous aurez besoin lors du développement de votre application Android. Vous pouvez voir de quoi il s'agit en allant dans les Clients section et ouverture de la section Java (Android) onglet.

3. Configurer les utilisateurs et les règles

En utilisant MongoDB Stitch, vous pouvez écrire en toute sécurité du code frontal Web et mobile pour interagir avec votre cluster MongoDB Atlas. Cela est possible car vous n'aurez pas à inclure dans votre code une chaîne de connexion contenant l'adresse du serveur, le nom d'utilisateur et le mot de passe de votre base de données.

Les utilisateurs finaux authentifiés de votre application Stitch accèdent automatiquement à votre base de données. Cependant, à l'aide d'une ou plusieurs règles, vous pouvez contrôler précisément les documents et les champs qu'ils peuvent voir ou modifier.

Pour authentifier vos utilisateurs, Stitch propose plusieurs mécanismes d'authentification, notamment l'authentification anonyme, l'authentification par e-mail/mot de passe et l'authentification à l'aide de fournisseurs d'identité fédérés populaires. Dans ce didacticiel, nous utiliserons l'authentification anonyme. Pour le configurer, accédez aux Utilisateurs et ouvrez la section Fournisseurs onglet.

Ensuite, sélectionnez l'option Autoriser les utilisateurs à se connecter de manière anonyme option, activez-la et appuyez sur Enregistrer bouton.

Disons que nous voulons permettre à nos utilisateurs anonymes de travailler uniquement avec les documents qu'ils possèdent. Pour créer une telle règle, allez dans les Règles rubrique.

Étant donné que les règles s'appliquent aux collections, appuyez sur Ajouter une collection bouton pour créer une nouvelle collection maintenant. Dans le formulaire qui s'affiche, donnez-lui un nom et précisez à quelle base de données il doit appartenir. Ensuite, sélectionnez Les utilisateurs ne peuvent lire et écrire que leurs propres données modèle de règles.

Lors de la sélection du modèle, vous serez invité à spécifier le nom du champ de votre document dans lequel vous stockerez l'ID d'authentification Stitch généré automatiquement par l'utilisateur. Stitch utilisera ce champ pour décider si un document appartient ou non à un utilisateur. Dire que le nom est user_id et soumettez le formulaire.

Dans la page qui s'ouvre ensuite, vous pouvez maintenant confirmer que seuls les propriétaires des documents de votre collection peuvent effectuer des opérations de lecture et d'écriture sur ceux-ci.

4. Préparer le projet Android

Pour pouvoir utiliser Stitch dans votre projet Android Studio, vous devez ajouter son SDK officiel en tant que implementation dépendance dans votre app build.gradle du module fichier.

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

De plus, vous devez mentionner l'identifiant unique de votre application Stitch dans votre projet. Allez donc dans res/values/strings.xml fichier et ajoutez-le en tant que <string> balise.

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

5. Établir une connexion

Avec une instance de StitchAppClient classe, vous pouvez facilement utiliser toutes les fonctionnalités offertes par la plate-forme Stitch. Pour initialiser initialiser StitchAppClient , vous devez appeler initializeDefaultAppClient() méthode et transmettez-lui l'ID de votre application Stitch. Cela ne doit être fait qu'une seule fois dans votre application, de préférence dès son démarrage.

Une fois qu'il est prêt, vous pouvez appeler le getDefaultAppClient() méthode pour obtenir une référence au client. Le code suivant, que vous pouvez ajouter au onCreate() de votre activité méthode, vous montre comment :

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

val stitchAppClient = Stitch.getDefaultAppClient()

À moins que votre utilisateur ne soit connecté à votre application Stitch, vous ne pourrez effectuer aucune opération utile sur votre cluster MongoDB Atlas. Par conséquent, vous devez maintenant connecter l'utilisateur en appelant le loginWithCredential() méthode, qui s'exécute de manière asynchrone et renvoie une Task objet. De plus, comme vous avez choisi l'authentification anonyme comme mécanisme d'authentification dans la console Web de Stitch, assurez-vous de transmettre une instance de AnonymousCredential classe à la méthode.

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

À ce stade, si vous exécutez l'application, Stitch vous enregistrera automatiquement en tant que nouvel utilisateur et vous connectera également à l'application. De plus, si vous revenez à la console Web Stitch et ouvrez les Utilisateurs section, vous pourrez voir qu'une nouvelle entrée a été ajoutée à la liste des utilisateurs.

6. Insérer des documents

Après une authentification réussie, vous pouvez aller de l'avant et obtenir une instance de RemoteMongoClient class pour commencer à interagir avec votre cluster MongoDB Atlas. Pour ce faire, vous pouvez appeler le getServiceClient() et précisez que le nom du service que vous souhaitez est "mongodb-atlas ". Voici comment :

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

N'oubliez pas que, grâce à la règle que vous avez créée précédemment dans ce didacticiel, votre utilisateur ne peut effectuer des opérations de lecture et d'écriture que sur ses propres données. De plus, votre utilisateur est limité à travailler uniquement avec la base de données et la collection que vous avez mentionnées dans la console Web Stitch.

Pour obtenir une référence à la base de données, appelez le getDatabase() méthode et lui transmettre son nom. De même, pour obtenir une référence à la collection, appelez getCollection() méthode, qui renvoie une RemoteMongoCollection objet.

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

Ce que vous ajoutez à la collection dépend bien sûr de vous. À titre d'exemple, disons que nous voulons ajouter des documents contenant des horodatages de toutes les heures auxquelles l'utilisateur a ouvert l'application.

Pour créer un nouveau document BSON, vous devez utiliser le constructeur du Document classe. Parce que Document les objets sont très similaires aux cartes, vous pouvez utiliser le [] opérateur pour leur ajouter des paires clé-valeur.

Le code suivant vous montre comment créer un nouveau document et y ajouter un horodatage :

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

En plus de vos données, tous vos documents doivent contenir l'ID d'authentification Stitch de l'utilisateur. Sans cela, vos opérations d'insertion échoueront. Pour obtenir l'identifiant d'authentification, vous pouvez directement utiliser le id propriété de l'implicite it objet disponible dans l'écouteur en cas de réussite.

myFirstDocument["user_id"] = it.id

Vous pouvez maintenant insérer le document en appelant le insertOne() méthode. (Vous pouvez lire sur le insertOne() et d'autres opérations d'écriture dans la documentation MongoDB pour le pilote Java.) Comme il s'exécute de manière asynchrone, vous aurez besoin d'un autre écouteur en cas de réussite pour vérifier si l'opération d'insertion a réussi.

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

Si vous exécutez l'application maintenant et vérifiez le Logcat d'Android Studio panneau, vous devriez pouvoir voir une entrée de journal qui ressemble à ceci :

7. Exécuter des requêtes

En appelant le find() méthode de votre RemoteMongoCollection objet, vous pouvez créer une requête. (Vous pouvez en savoir plus sur find() et d'autres opérations de requête dans la documentation du pilote Java MongoDB.) La méthode renvoie un RemoteFindIterable objet, sur lequel vous pouvez appeler plus de méthodes telles que sort() et limit() pour gérer les résultats de la requête. Par exemple, le code suivant crée une requête pour trouver les cinq derniers documents créés par l'utilisateur :

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

Pour exécuter réellement la requête, vous pouvez appeler son into() méthode, qui attend une liste comme argument. Comme son nom l'indique, il charge les résultats de la requête, qui ne sont que Document objets, dans la liste que vous lui transmettez. Il s'exécute de manière asynchrone, vous pouvez donc commencer à utiliser la liste uniquement dans un écouteur en cas de réussite.

val result = mutableListOf<Document>()

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

Pour l'instant, pour simplifier les choses, utilisons un TextView widget pour afficher les résultats de la requête. Ajoutez donc le code suivant au fichier XML de mise en page de votre activité :

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

De retour à l'intérieur de l'écouteur en cas de réussite, vous pouvez maintenant parcourir la liste et créer une chaîne concaténée contenant tous les horodatages. Vous pouvez éventuellement transmettre les horodatages à getRelativeDateTimeString() méthode du DateUtils classe pour les rendre plus lisibles. Une fois la chaîne prête, vous pouvez l'affecter directement au TextView widget. Voici comment :

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 vous exécutez à nouveau l'application, vous devriez maintenant voir quelque chose comme ceci sur votre appareil :