MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So verwenden Sie MongoDB Stitch in Android-Apps

Mit MongoDB Atlas brauchen Sie nur ein paar Klicks im Browser, um Ihren eigenen MongoDB-Cluster in der Cloud zum Laufen zu bringen. Indem Sie es verwenden, können Sie Android- und iOS-Apps erstellen, die Millionen von Benutzern effizient bedienen können. Sie benötigen jedoch weiterhin einen Back-End-Server, der als Vermittler zwischen den Geräten Ihrer Benutzer und Ihrem Cluster fungieren kann. Sie benötigen es, um Sicherheitsrichtlinien durchzusetzen, Ihren CRUD-Vorgängen eine Abstraktionsebene hinzuzufügen, Jobs zu planen und für viele andere wichtige Aufgaben.

  • MongoDBCerstellen eines Datenbankclusters in der Cloud mit MongoDB AtlasAshraff Hathibelagal

MongoDB Stitch ist eine leistungsstarke serverlose Plattform, die alle Ihre Back-End-Anforderungen erfüllen kann. Neben der Bereitstellung einer differenzierten Zugriffskontrolle auf die Daten in Ihrem MongoDB Atlas-Cluster bietet es eine JavaScript-basierte Rechenumgebung, mit der Sie eine Vielzahl serverseitiger Vorgänge ausführen können. In diesem Tutorial zeige ich Ihnen, wie Sie die Plattform in einer Android-App verwenden.

Voraussetzungen

Um mitzumachen, benötigen Sie:

  • ein MongoDB-Atlas-Konto
  • die neueste Version von Android Studio
  • ein Gerät oder Emulator mit Android 5.0 oder höher

1. Erstellen Sie einen MongoDB-Atlas-Cluster

MongoDB Stitch ist für die Verwendung mit einem MongoDB Atlas-Cluster vorgesehen. Es steht Ihnen frei, einen bereits vorhandenen Cluster zu verwenden, aber ich schlage vor, dass Sie für dieses Tutorial einen neuen erstellen.

Melden Sie sich zunächst bei Ihrem MongoDB-Atlas-Konto an und klicken Sie auf Neuen Cluster erstellen Schaltfläche.

Wählen Sie im nächsten Bildschirm, der Sie nach Konfigurationsdetails zu Ihrem neuen Cluster fragt, einen beliebigen Cloud-Anbieter und eine Region aus, die einen M0-Cluster im kostenlosen Kontingent anbietet, und klicken Sie auf Cluster erstellen Schaltfläche.

Nach ein paar Minuten haben Sie einen brandneuen Free-Tarif-Cluster mit dem Namen Cluster0 .

2. Erstellen Sie eine MongoDB-Stitch-Anwendung

Um Ihrem Cluster eine Stitch-Anwendung zuzuordnen, klicken Sie auf Anwendung verknüpfen Verknüpfung. Drücken Sie auf der Seite, die sich als nächstes öffnet, auf Neue Anwendung erstellen Schaltfläche.

Sie können jetzt den gewünschten Namen für Ihre neue Stitch-Anwendung eingeben. Vergewissern Sie sich danach, dass der richtige Cluster ausgewählt ist, und klicken Sie auf Erstellen Schaltfläche.

An diesem Punkt ist Ihre Stitch-Anwendung – mit sehr großzügigen kostenlosen Kontingenten – fertig.

Die Anwendung hat eine eindeutige ID, die Sie beim Entwickeln Ihrer Android-App benötigen. Sie können sehen, was es ist, indem Sie zu den Clients gehen Abschnitt und öffnen Sie Java (Android) Registerkarte.

3. Benutzer und Regeln konfigurieren

Durch die Verwendung von MongoDB Stitch können Sie Web- und Mobil-Front-End-Code sicher schreiben, um mit Ihrem MongoDB Atlas-Cluster zu interagieren. Dies ist möglich, weil Sie keine Verbindungszeichenfolge mit der Serveradresse, dem Benutzernamen und dem Passwort Ihrer Datenbank in Ihren Code aufnehmen müssen.

Authentifizierte Endbenutzer Ihrer Stitch-Anwendung erhalten automatisch Zugriff auf Ihre Datenbank. Mithilfe einer oder mehrerer Regeln können Sie jedoch genau steuern, welche Dokumente und Felder sie sehen oder ändern können.

Um Ihre Benutzer zu authentifizieren, bietet Stitch mehrere Authentifizierungsmechanismen, darunter anonyme Authentifizierung, E-Mail-/Passwort-Authentifizierung und Authentifizierung mit gängigen föderierten Identitätsanbietern. In diesem Tutorial verwenden wir die anonyme Authentifizierung. Rufen Sie zum Einrichten die Benutzer auf Abschnitt und öffnen Sie die Anbieter Registerkarte.

Wählen Sie als Nächstes die Option Nutzern erlauben, sich anonym anzumelden aus Option, aktivieren Sie sie und drücken Sie Speichern Schaltfläche.

Angenommen, wir möchten unseren anonymen Benutzern erlauben, nur mit den Dokumenten zu arbeiten, deren Eigentümer sie sind. Um eine solche Regel zu erstellen, gehen Sie zu den Regeln Abschnitt.

Da Regeln auf Sammlungen angewendet werden, klicken Sie auf Sammlung hinzufügen Schaltfläche, um jetzt eine neue Sammlung zu erstellen. Geben Sie ihm im erscheinenden Formular einen Namen und geben Sie an, zu welcher Datenbank er gehören soll. Wählen Sie danach Benutzer können nur ihre eigenen Daten lesen und schreiben aus Regelvorlage.

Bei der Auswahl der Vorlage werden Sie aufgefordert, den Namen des Felds in Ihrem Dokument anzugeben, in dem Sie die automatisch generierte Stitch-Authentifizierungs-ID des Benutzers speichern. Stitch verwendet dieses Feld bei der Entscheidung, ob ein Dokument einem Benutzer gehört oder nicht. Angenommen, der Name ist user_id und senden Sie das Formular ab.

Auf der sich öffnenden Seite können Sie nun bestätigen, dass nur die Eigentümer der Dokumente in Ihrer Sammlung Lese- und Schreibvorgänge an ihnen durchführen können.

4. Android-Projekt vorbereiten

Um Stitch in Ihrem Android Studio-Projekt verwenden zu können, müssen Sie das offizielle SDK als implementation hinzufügen Abhängigkeit in Ihrer app build.gradle des Moduls Datei.

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

Außerdem müssen Sie die eindeutige ID Ihrer Stitch-App in Ihrem Projekt angeben. Gehen Sie also zur res/values/strings.xml Datei und fügen Sie sie als <string> hinzu -Tag.

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

5. Verbindung herstellen

Mit einer Instanz des StitchAppClient class können Sie alle Funktionen, die die Stitch-Plattform bietet, problemlos nutzen. Zum Initialisieren initialisieren Sie StitchAppClient müssen Sie initializeDefaultAppClient() aufrufen -Methode und übergebe ihr die ID deiner Stitch-App. Dies muss nur einmal in Ihrer App durchgeführt werden, vorzugsweise direkt nach dem Start.

Sobald es fertig ist, können Sie getDefaultAppClient() aufrufen Methode, um eine Referenz auf den Client zu erhalten. Der folgende Code, den Sie zu onCreate() Ihrer Aktivität hinzufügen können Methode, zeigt Ihnen wie:

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

val stitchAppClient = Stitch.getDefaultAppClient()

Wenn Ihr Benutzer nicht bei Ihrer Stitch-App angemeldet ist, können Sie keine nützlichen Vorgänge auf Ihrem MongoDB-Atlas-Cluster ausführen. Daher müssen Sie den Benutzer jetzt anmelden, indem Sie loginWithCredential() aufrufen -Methode, die asynchron ausgeführt wird und eine Task zurückgibt Objekt. Da Sie die anonyme Authentifizierung als Authentifizierungsmechanismus in der Stitch-Webkonsole ausgewählt haben, stellen Sie außerdem sicher, dass Sie eine Instanz von AnonymousCredential übergeben Klasse zur Methode.

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

Wenn Sie zu diesem Zeitpunkt die App ausführen, registriert Stitch Sie automatisch als neuen Benutzer und meldet Sie auch bei der App an. Wenn Sie außerdem zur Stitch-Webkonsole zurückkehren und die Benutzer öffnen Abschnitt können Sie sehen, dass der Benutzerliste ein neuer Eintrag hinzugefügt wurde.

6. Dokumente einfügen

Nach einer erfolgreichen Authentifizierung können Sie fortfahren und eine Instanz von RemoteMongoClient abrufen -Klasse, um mit der Interaktion mit Ihrem MongoDB-Atlas-Cluster zu beginnen. Dazu können Sie getServiceClient() aufrufen -Methode und geben Sie an, dass der Name des gewünschten Dienstes "mongodb-atlas" lautet ". So geht's:

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

Denken Sie daran, dass Ihr Benutzer dank der Regel, die Sie zuvor in diesem Tutorial erstellt haben, nur Lese- und Schreibvorgänge für seine eigenen Daten ausführen kann. Darüber hinaus ist Ihr Benutzer darauf beschränkt, nur mit der Datenbank und Sammlung zu arbeiten, die Sie in der Stitch-Webkonsole erwähnt haben.

Um einen Verweis auf die Datenbank zu erhalten, rufen Sie getDatabase() auf -Methode und übergebe ihr ihren Namen. Um einen Verweis auf die Sammlung zu erhalten, rufen Sie auf ähnliche Weise getCollection() auf -Methode, die eine RemoteMongoCollection zurückgibt Objekt.

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

Was Sie der Sammlung hinzufügen, bleibt natürlich Ihnen überlassen. Nehmen wir als Beispiel an, wir möchten Dokumente hinzufügen, die Zeitstempel aller Zeiten enthalten, zu denen der Benutzer die App geöffnet hat.

Um ein neues BSON-Dokument zu erstellen, müssen Sie den Konstruktor des Document verwenden Klasse. Denn Document Objekte Karten sehr ähnlich sind, können Sie den [] verwenden Operator, um ihnen Schlüssel-Wert-Paare hinzuzufügen.

Der folgende Code zeigt Ihnen, wie Sie ein neues Dokument erstellen und ihm einen Zeitstempel hinzufügen:

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

Zusätzlich zu Ihren Daten müssen alle Ihre Dokumente die Stitch-Authentifizierungs-ID des Benutzers enthalten. Ohne sie schlagen Ihre Einfügevorgänge fehl. Um die Authentifizierungs-ID zu erhalten, können Sie direkt die id verwenden Eigenschaft des impliziten it -Objekt, das im Erfolgs-Listener verfügbar ist.

myFirstDocument["user_id"] = it.id

Sie können nun das Dokument einfügen, indem Sie insertOne() aufrufen Methode. (Sie können über insertOne() lesen -Methode und andere Schreibvorgänge in der MongoDB-Dokumentation für den Java-Treiber.) Da er asynchron ausgeführt wird, benötigen Sie einen weiteren Erfolgs-Listener, um zu überprüfen, ob der Einfügevorgang erfolgreich war.

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

Wenn Sie die App jetzt ausführen und in Logcat von Android Studio nachsehen Panel, sollten Sie in der Lage sein, einen Protokolleintrag zu sehen, der wie folgt aussieht:

7. Abfragen ausführen

Durch Aufruf von find() -Methode Ihrer RemoteMongoCollection -Objekt können Sie eine Abfrage erstellen. (Sie können mehr über find() erfahren und andere Abfrageoperationen in der MongoDB-Java-Treiberdokumentation.) Die Methode gibt ein RemoteFindIterable zurück Objekt, auf dem Sie weitere Methoden wie sort() aufrufen können und limit() um die Ergebnisse der Abfrage zu verwalten. Beispielsweise erstellt der folgende Code eine Abfrage, um die letzten fünf vom Benutzer erstellten Dokumente zu finden:

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

Um die Abfrage tatsächlich auszuführen, können Sie ihr into() aufrufen -Methode, die eine Liste als Argument erwartet. Wie der Name schon sagt, lädt es die Ergebnisse der Abfrage, die nichts anderes als Document sind Objekte, in die Liste, die Sie ihm übergeben. Es wird asynchron ausgeführt, sodass Sie die Liste nur innerhalb eines Erfolgs-Listeners verwenden können.

val result = mutableListOf<Document>()

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

Um die Dinge einfach zu halten, verwenden wir zunächst eine TextView Widget, um die Ergebnisse der Abfrage anzuzeigen. Fügen Sie also den folgenden Code zur Layout-XML-Datei Ihrer Aktivität hinzu:

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

Zurück im Erfolgslistener können Sie nun die Liste durchlaufen und eine verkettete Zeichenfolge erstellen, die alle Zeitstempel enthält. Optional können Sie die Zeitstempel an getRelativeDateTimeString() übergeben Methode der DateUtils Klasse, um sie besser lesbar zu machen. Sobald der String fertig ist, können Sie ihn direkt der TextView zuweisen Widget. So geht's:

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

Wenn Sie die App erneut ausführen, sollten Sie jetzt auf Ihrem Gerät Folgendes sehen: