MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Utwórz aplikację do robienia notatek na Androida za pomocą MongoDB Stitch

Jeśli szukasz bezpiecznej platformy bezserwerowej, która jest zarówno bogata w funkcje, jak i opłacalna, możesz wypróbować MongoDB Stitch. Oprócz oferowania przydatnych funkcji po stronie serwera, takich jak funkcje, usługi webhook i uwierzytelnianie użytkowników, jest on ściśle zintegrowany z MongoDB Atlas, potężnym i dojrzałym rozwiązaniem do przechowywania danych w chmurze.

W tym samouczku pokażę, jak używać MongoDB Stitch i klastra MongoDB Atlas do tworzenia od podstaw aplikacji do robienia notatek na Androida. Przeprowadzę Cię również przez proces integracji z aplikacją Google Sign-In, dostawcy uwierzytelniania obsługiwanego przez Stitch.

Wymagania wstępne

Aby w pełni wykorzystać ten samouczek, będziesz potrzebować:

  • Android Studio 3.1 lub nowszy
  • konto MongoDB Atlas
  • urządzenie lub emulator z Androidem 5.0 lub nowszym

Jeśli jeszcze tego nie zrobiłeś, sugeruję również zapoznanie się z poprzednim samouczkiem dotyczącym używania Stitch w aplikacjach na Androida.


1. Tworzenie aplikacji Stitch

Będziesz potrzebować aplikacji Stitch, aby móc korzystać z usług oferowanych przez platformę Stitch w swoim projekcie Android. Zaloguj się więc na swoje konto MongoDB Atlas i przejdź do Aplikacji Stitch sekcja.

Naciśnij Utwórz nową aplikację przycisk. W wyświetlonym oknie dialogowym nadaj aplikacji znaczącą nazwę, wybierz jeden ze swoich klastrów MongoDB Atlas z listy rozwijanej i naciśnij przycisk Utwórz przycisk.

Jeśli nie masz obecnie żadnych klastrów, możesz dowiedzieć się, jak utworzyć i skonfigurować jeden tutaj:

  • MongoDBUtwórz klaster baz danych w chmurze za pomocą MongoDB AtlasAshraff Hathibelagal

Gdy aplikacja będzie gotowa, przejdź do Klientów i przejdź do Java (Android) zakładkę, aby określić, jaki jest jego identyfikator aplikacji. Identyfikator będzie potrzebny w dalszej części tego samouczka.

2. Konfiguracja uwierzytelniania

Będziesz używać Google jako dostawcy uwierzytelniania dla aplikacji, którą dziś utworzysz. Innymi słowy, umożliwisz użytkownikom końcowym logowanie się do aplikacji przy użyciu ich kont Google.

W konsoli administracyjnej Stitch skonfigurowanie dowolnego dostawcy uwierzytelniania zajmuje tylko chwilę. Zanim jednak będziesz mógł to zrobić, musisz uzyskać kilka ważnych informacji od dostawcy uwierzytelniania. Aby uzyskać szczegółowe informacje od Google, otwórz nową kartę w przeglądarce, zaloguj się na swoje konto Google i przejdź do panelu API Google Cloud Platform.

Naciśnij Utwórz projekt przycisk, aby utworzyć nowy projekt Google Cloud. Po nadaniu nazwy projektowi naciśnij Utwórz przycisk.

Gdy projekt będzie gotowy, przejdź do Poświadczenia i otwórz ekran akceptacji OAuth patka. W tym miejscu na razie możesz wpisać tylko Nazwę aplikacji i naciśnij Zapisz przycisk.

Następnie naciśnij Utwórz dane logowania wybierz Identyfikator klienta OAuth opcję i wybierz Android jako typ aplikacji.

Zostaniesz teraz poproszony o podanie nazwy pakietu, którego zamierzasz używać w aplikacji na Androida, oraz odcisku palca SHA-1. W tym samouczku sugeruję użycie odcisku palca certyfikatu debugowania. Aby to uzyskać, otwórz terminal i uruchom następujące polecenie:

keytool -exportcert -alias androiddebugkey \-keystore ~/.android/debug.keystore \-list

Po skopiowaniu odcisku palca i wklejeniu go do formularza naciśnij Utwórz przycisk.

W tym momencie Twoja aplikacja na Androida będzie mogła korzystać z logowania przez Google. Musisz jednak zezwolić aplikacji Stitch na jej używanie. Dlatego naciśnij Utwórz dane logowania ponownie. Tym razem wybierz aplikację internetową jako typ aplikacji.

Po wyświetleniu monitu o wprowadzenie autoryzowanego identyfikatora URI przekierowania użyj adresu URL wywołania zwrotnego Stitch:https://stitch.mongodb.com/api/client/v2.0/auth/callback

Po naciśnięciu przycisku Utwórz teraz zobaczysz wyskakujące okienko zawierające dwa ciągi znaków:identyfikator klienta i klucz tajny klienta. Zanotuj je obie i wróć do konsoli administratora Stitch.

W sekcji Użytkownicy sekcji konsoli, przejdź do Dostawców i wybierz Google . Po włączeniu wpisz identyfikator klienta i klucz klienta, a następnie naciśnij Zapisz przycisk.

3. Dodawanie reguły

Użytkownicy Twojej aplikacji nie mogą widzieć swoich notatek. Muszą mieć dostęp tylko do notatek, które sami stworzyli. Aby wyegzekwować tę zasadę, przejdź do Reguły sekcji i naciśnij Dodaj kolekcję przycisk.

Możesz teraz nadać nazwę swojej bazie danych MongoDB i określić nazwę kolekcji, w której będziesz przechowywać wszystkie notatki. Niech nazwą bazy danych będzie notes_db a kolekcja to notatki .

Następnie wybierz Użytkownicy mogą tylko czytać i zapisywać własne dane szablon reguł, który odpowiada wymaganiom Twojej aplikacji, i powiedz, że nazwa pola, w którym będziesz przechowywać identyfikator uwierzytelniania użytkownika, to user_id .

Na koniec naciśnij Dodaj kolekcję przycisk.

Jeśli chcesz bliżej przyjrzeć się właśnie utworzonej regule, możesz nacisnąć Tryb zaawansowany przycisk, który pokazuje odpowiednik reguły w formacie JSON.

4. Konfiguracja projektu Android

Teraz, gdy aplikacja Stitch jest gotowa, możesz rozpocząć tworzenie aplikacji na Androida. Stwórz więc nowy projekt Android Studio z pustą aktywnością, upewniając się, że jego nazwa pakietu odpowiada tej, którą wpisałeś wcześniej.

Aby móc używać Stitch SDK w projekcie, dodaj następującą implementation zależność na poziomie aplikacji build.gradle plik:

implementacja „org.mongodb:stitch-android-sdk:4.0.5”

Aby obsługiwać logowanie przez Google, dodaj także zależność dla usług Google Play.

implementacja „com.google.android.gms:play-services-auth:15.0.1”

Będziesz potrzebować w aplikacji kilku widżetów Material Design, takich jak karty i pływające przyciski akcji. Dodaj więc również następujące zależności:

Na koniec dodaj identyfikator aplikacji Stitch i identyfikator klienta wymieniony w konsoli administracyjnej Stitch jako elementy w pliku strings.xml plik.

YOUR_APP_IDYOUR_CLIENT_ID

5. Tworzenie układów

Użytkownicy mogą korzystać z aplikacji do robienia notatek tylko wtedy, gdy są zalogowani. Dlatego zaraz po otwarciu aplikacji musisz pokazać im przycisk logowania. Najszybszym sposobem na to jest użycie SignInButton widżet w układzie głównej aktywności:

Po pomyślnym zalogowaniu przekierujesz użytkownika do innej aktywności zawierającej element ListView widżet, który będzie wyświetlał notatki użytkownika, oraz FloatingActionButton widget, który użytkownik może nacisnąć, aby utworzyć nową notatkę. Utwórz więc kolejną pustą aktywność i dodaj następujący kod do pliku XML układu:

  

Każdy element ListView widget będzie notatką. Aby uprościć sprawę, powiedzmy, że układ notatki ma tylko CardView widżet zawierający TextView widget. Utwórz więc nowy plik XML układu o nazwie layout_note.xml i dodaj do niego następujący kod:

 

6. Wdrażanie logowania przez Google

Gdy użytkownik naciśnie przycisk logowania, musisz zainicjować proces logowania Google. Tak więc w ramach pierwszego działania dodaj do przycisku obsługę zdarzeń po kliknięciu.

Wewnątrz modułu obsługi możesz przejść dalej i utworzyć GoogleSignInOptions obiekt skonfigurowany do używania domyślnych opcji logowania. Ponieważ Twoja aplikacja Stitch, którą można traktować jako serwer zaplecza, musi być również częścią procesu logowania, upewnij się, że wywołasz funkcję requestServerAuthCode() metody i przekaż do niej swój identyfikator klienta. Poniższy kod pokazuje, jak:

val signInOptions =GoogleSignInOptions.Builder( GoogleSignInOptions.DEFAULT_SIGN_IN ).requestServerAuthCode( getString(R.string.google_client_id) ).build()

Możesz teraz utworzyć GoogleSignIn klienta, wywołując getClient() metodę i przekazanie GoogleSignInOptions sprzeciwić się temu jako argumentowi. Korzystając z klienta, możesz łatwo rozpocząć przepływ pracy logowania, pobierając od niego intencję logowania i przekazując ją do funkcji startActivityForResult() działania metoda. Oto jak:

val signInClient =GoogleSignIn.getClient( this@MainActivity, signInOptions)startActivityForResult( signInClient.signIntent, 1 // kod żądania)

Aby otrzymać wynik aktywności, którą właśnie uruchomiłeś, musisz zastąpić onActivityResult() metoda. Wewnątrz będziesz mieć dostęp do nowej Intent obiekt, który możesz przekazać do getSignedInAccountFromIntent() metoda identyfikacji użytkownika.

zastąp zabawę onActivityResult(requestCode:Int, resultCode:Int, data:Intent?) { super.onActivityResult(requestCode, resultCode, data) valsignedInAccount =GoogleSignIn.getSignedInAccountFromIntent(data) // Więcej kodu tutaj}

Jeśli użytkownik nie powiedzie się lub odmówi zalogowania, będziesz mieć teraz wyjątek. Zajmij się tym, wyświetlając informacyjny Toast wiadomość i zamknięcie aplikacji.

if(signedInAccount.exception !=null) { Toast.makeText(to, "Najpierw musisz się zalogować", Toast.LENGTH_LONG).show() finish() return}

Jednak w przypadku pomyślnego zalogowania będziesz mieć dostęp do kodu uwierzytelniającego serwera, którego możesz użyć do utworzenia GoogleCredential obiekt. Przekazując obiekt do loginWithCredential() metody domyślnego klienta Stitch Twojego projektu, możesz zarówno zarejestrować, jak i zalogować użytkownika do swojej aplikacji.

Po pomyślnym zakończeniu metody aplikacja powinna przejść do drugiej aktywności, która zawiera elementy interfejsu użytkownika do wyświetlania notatek i dodawania nowych notatek. Poniższy kod pokazuje, jak to zrobić zwięźle:

Stitch.getDefaultAppClient().auth .loginWithCredential( GoogleCredential(signedInAccount.result.serverAuthCode) ) .addOnSuccessListener { // Otwórz aktywność wyświetlającą notatki startActivity( Intent(this@MainActivity, NotesActivity::class.}java) 

Jeśli teraz utworzysz i uruchomisz aplikację, powinieneś być w stanie zalogować się do niej przy użyciu jednego ze swoich kont Google.

7. Dodawanie notatek

W drugim ćwiczeniu będziesz potrzebować zarówno klienta Stitch, jak i klienta Atlas MongoDB. Pierwsza z nich będzie potrzebna do uzyskania identyfikatora uwierzytelniania użytkownika, a druga do wykonania operacji odczytu i zapisu w klastrze MongoDB Atlas. Dodaj je więc jako prywatne pola działalności.

wartość prywatna stitchClient =Stitch.getDefaultAppClient() wartość prywatna atlasClient =stitchClient.getServiceClient( RemoteMongoClient.factory, "mongodb-atlas" )

Gdy użytkownicy nacisną pływający przycisk akcji, musisz wyświetlić okno dialogowe, które prosi ich o wpisanie swoich notatek. Dzięki bibliotece Material Dialogs, którą dodałeś wcześniej jako zależność, jest to bardzo intuicyjne.

Poniższy kod pokazuje, jak dodać odbiornik po kliknięciu do przycisku i utworzyć podstawowe okno dialogowe wprowadzania:

add_note_button.setOnClickListener { val dialog =MaterialDialog.Builder(this@NotesActivity) .title("Nowa uwaga") .input("Wpisz coś", null, false, { _, note -> // Więcej kodu tutaj } ).build() dialog.show()}

Wewnątrz obsługi zdarzeń okna dialogowego będziesz mieć dostęp do notatki, którą wpisał użytkownik. Aby zapisać ją w swoim klastrze MongoDB Atlas, musisz umieścić ją w nowym dokumencie MongoDB. Dodatkowo, aby upewnić się, że notatka jest widoczna tylko dla użytkownika, który ją utworzył, dokument musi zawierać user_id pole, którego wartość odpowiada identyfikatorowi uwierzytelniania użytkownika. Poniższy kod, który trafia do modułu obsługi zdarzeń, pokazuje, jak utworzyć dokument:

val document =Document()document["text"] =note.toString()document["user_id"] =stitchClient.auth.user!!.id

Teraz, gdy dokument jest gotowy, musisz wstawić go do notes kolekcja, która należy do notes_db Baza danych. Oto jak uzyskać odniesienia do bazy danych i kolekcji oraz użyć funkcji insertOne() metoda wstawienia dokumentu:

val collection =atlasClient.getDatabase("notes_db") .getCollection("notes")collection.insertOne(document).addOnSuccessListener { Toast.makeText(this@NotesActivity, "Zapisano jedną notatkę", Toast.LENGTH_LONG).show ()}

Jeśli teraz uruchomisz aplikację, powinieneś być w stanie tworzyć nowe notatki i zapisywać je.

8. Wyświetlanie notatek

Aby móc wyświetlić notatki utworzone przez użytkownika, musisz najpierw pobrać wszystkie dokumenty z notes kolekcja należąca do użytkownika. Nie musisz jednak pisać złożonego zapytania, aby to zrobić. Z powodu utworzonej wcześniej reguły Stitch automatycznie zapewnia, że ​​każde zapytanie uruchomione w kolekcji zwróci tylko te dokumenty, które są własnością użytkownika.

Utwórz nową metodę wyświetlania notatek.

prywatna zabawa showNotes() { // Więcej kodu tutaj}

Wewnątrz metody możesz bezpośrednio wywołać find() metoda na notes kolekcja, aby utworzyć zapytanie, które może pobrać notatki użytkownika. Aby wykonać zapytanie asynchronicznie, musisz wywołać into() metody i przekaż do niej pustą listę. Wyniki zapytania będą dostępne na liście po pomyślnym zakończeniu.

val notes =mutableListOf()atlasClient.getDatabase("notes_db") .getCollection("notes") .find() .into(notes) .addOnSuccessListener { // Więcej kodu tutaj }

Wewnątrz odbiornika powodzenia musisz teraz utworzyć instancję ArrayAdapter class do renderowania listy notatek. Nie możesz jednak przekazać listy Document obiekty bezpośrednio do konstruktora klasy. Musisz najpierw przekonwertować go na listę String przedmioty. Poniższy kod pokazuje, jak to zrobić za pomocą map() metoda:

val adapter =ArrayAdapter(this@NotesActivity, R.layout.layout_note, R.id.note_text, notes.map { it.getString("text") // Wyodrębnij tylko pole 'text' // każdego dokumentu })

Gdy adapter jest gotowy, możesz go uruchomić, przypisując go do adapter właściwość ListView widget.

notes_container.adapter =adapter

showNotes() metoda jest teraz gotowa. Dodaj do niego wywołanie wewnątrz onCreate() metoda, aby użytkownicy mogli zobaczyć swoje notatki zaraz po otwarciu działania. Co więcej, jeśli chcesz, aby lista wyświetlała nowe notatki zaraz po ich utworzeniu, sugeruję dodanie do niej również wywołania w odbiorniku powodzenia dołączonym do insertOne() metoda.

Dzięki powyższym zmianom, jeśli ponownie uruchomisz aplikację, będziesz mógł zarówno dodawać nowe notatki, jak i przeglądać istniejące.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak uruchomić MongoDB jako usługę Windows?

  2. MongoDB $atanh

  3. pymongo:MongoClient lub Połączenie

  4. Jak wdrożyć MongoDB w celu zapewnienia wysokiej dostępności

  5. Mongo próbuje automatycznie połączyć się z portem 27017 (localhost)