1. Übersicht
Bild: Die laufende Friendly Chat App.
Willkommen beim Codelab für den Friendly Chat. In diesem Codelab erfahren Sie, wie Sie mit der Firebase-Plattform eine Chat-App für Android erstellen.
Lerninhalte
- Hier erfahren Sie, wie Sie Firebase Authentication verwenden, um Nutzern die Anmeldung zu ermöglichen.
- Daten mit der Firebase Realtime Database synchronisieren
- So speichern Sie Binärdateien in Cloud Storage for Firebase.
- Informationen zum Entwickeln einer Android-App mit Firebase und der Firebase Local Emulator Suite
Voraussetzungen
- Die neueste Version von Android Studio.
- Einen Android-Emulator mit Android 5.0 und höher.
- Node.js-Version 10 oder höher (zur Verwendung der Emulator Suite)
- Java 8 oder höher. Folgen Sie dieser Anleitung, um Java zu installieren. Führen Sie
java -version
aus, um die Version zu prüfen. - Vorkenntnisse der Programmiersprache Kotlin
2. Beispielcode abrufen
Repository klonen
Klonen Sie das GitHub-Repository über die Befehlszeile:
$ git clone https://github.com/firebase/codelab-friendlychat-android
In Android Studio importieren
Wählen Sie in Android Studio File > Open (Datei > Öffnen) aus und wählen Sie dann das Verzeichnis build-android-start
() aus dem Verzeichnis aus, in das Sie den Beispielcode heruntergeladen haben.
Das build-android-start
-Projekt sollte jetzt in Android Studio geöffnet sein. Wenn Sie eine Warnung zu einer fehlenden google-services.json
-Datei sehen, ist das kein Grund zur Sorge. Sie wird in einem späteren Schritt hinzugefügt.
Abhängigkeiten prüfen
In diesem Codelab wurden alle benötigten Abhängigkeiten bereits hinzugefügt. Es ist jedoch wichtig zu wissen, wie Sie Ihrer App das Firebase SDK hinzufügen:
build.gradle.kts
plugins {
id("com.android.application") version "8.0.0" apply false
id("com.android.library") version "8.0.0" apply false
id("org.jetbrains.kotlin.android") version "1.8.20" apply false
// The google-services plugin is required to parse the google-services.json file
id("com.google.gms.google-services") version "4.3.15" apply false
}
app/build.gradle.kts
plugins {
id("com.android.application")
id("kotlin-android")
id("com.google.gms.google-services")
}
android {
// ...
}
dependencies {
// ...
// Google Sign In SDK
implementation("com.google.android.gms:play-services-auth:20.5.0")
// Firebase SDK
implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-database-ktx")
implementation("com.google.firebase:firebase-storage-ktx")
implementation("com.google.firebase:firebase-auth-ktx")
// Firebase UI Library
implementation("com.firebaseui:firebase-ui-auth:8.0.2")
implementation("com.firebaseui:firebase-ui-database:8.0.2")
}
3. Firebase CLI installieren
In diesem Codelab verwenden Sie die Firebase Emulator Suite, um Firebase Auth, Realtime Database und Cloud Storage lokal zu emulieren. So erhalten Sie eine sichere, schnelle und kostenlose lokale Entwicklungsumgebung für die Erstellung Ihrer App.
Firebase CLI installieren
Zuerst müssen Sie die Firebase CLI installieren. Wenn Sie macOS oder Linux verwenden, können Sie den folgenden cURL-Befehl ausführen:
curl -sL https://firebase.tools | bash
Wenn Sie Windows verwenden, lesen Sie die Installationsanleitung, um ein eigenständiges Binärprogramm zu erhalten oder die Installation über npm
durchzuführen.
Nachdem Sie die Befehlszeile installiert haben, sollte beim Ausführen von firebase --version
die Version 9.0.0
oder höher angezeigt werden:
$ firebase --version 9.0.0
Anmelden
Führen Sie firebase login
aus, um die Befehlszeile mit Ihrem Google-Konto zu verbinden. Dadurch wird ein neues Browserfenster geöffnet, in dem Sie die Anmeldung abschließen können. Wählen Sie dasselbe Konto aus, das Sie beim Erstellen Ihres Firebase-Projekts verwendet haben.
4. Verbindung mit der Firebase Emulator Suite herstellen
Emulatoren starten
Führen Sie im Terminal den folgenden Befehl im Stammverzeichnis Ihres lokalen codelab-friendlychat-android
-Verzeichnisses aus:
firebase emulators:start --project=demo-friendlychat-android
Sie sollten einige Protokolle wie dieses sehen. Die Portwerte wurden in der Datei firebase.json
definiert, die im geklonten Beispielcode enthalten ist.
$ firebase emulators:start --project=demo-friendlychat-android
i emulators: Starting emulators: auth, database, storage
i emulators: Detected demo project ID "demo-friendlychat-android", emulated services will use a demo configuration and attempts to access non-emulated services for this project will fail.
i database: Database Emulator logging to database-debug.log
i ui: Emulator UI logging to ui-debug.log
┌─────────────────────────────────────────────────────────────┐
│ ✔ All emulators ready! It is now safe to connect your app. │
│ i View Emulator UI at http://localhost:4000 │
└─────────────────────────────────────────────────────────────┘
┌────────────────┬────────────────┬────────────────────────────────┐
│ Emulator │ Host:Port │ View in Emulator UI │
├────────────────┼────────────────┼────────────────────────────────┤
│ Authentication │ localhost:9099 │ http://localhost:4000/auth │
├────────────────┼────────────────┼────────────────────────────────┤
│ Database │ localhost:9000 │ http://localhost:4000/database │
├────────────────┼────────────────┼────────────────────────────────┤
│ Storage │ localhost:9199 │ http://localhost:4000/storage │
└────────────────┴────────────────┴────────────────────────────────┘
Emulator Hub running at localhost:4400
Other reserved ports: 4500
Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files.
Gehen Sie in Ihrem Webbrowser zu http://localhost:4000, um die Benutzeroberfläche der Firebase Emulator Suite anzusehen:
Lassen Sie den Befehl emulators:start
für den Rest des Codelabs ausgeführt.
App verbinden
Öffnen Sie in Android Studio MainActivity.kt
und fügen Sie den folgenden Code in die Methode onCreate
ein:
// When running in debug mode, connect to the Firebase Emulator Suite.
// "10.0.2.2" is a special IP address which allows the Android Emulator
// to connect to "localhost" on the host computer. The port values (9xxx)
// must match the values defined in the firebase.json file.
if (BuildConfig.DEBUG) {
Firebase.database.useEmulator("10.0.2.2", 9000)
Firebase.auth.useEmulator("10.0.2.2", 9099)
Firebase.storage.useEmulator("10.0.2.2", 9199)
}
5. Start-App ausführen
„google-services.json“ hinzufügen
Damit Ihre Android-App eine Verbindung zu Firebase herstellen kann, müssen Sie im Ordner app
Ihres Android-Projekts eine google-services.json
-Datei hinzufügen. Für dieses Codelab haben wir eine Mock-JSON-Datei bereitgestellt, mit der Sie eine Verbindung zur Firebase Emulator Suite herstellen können.
Kopieren Sie die Datei mock-google-services.json
als google-services.json
in den Ordner build-android-start/app
:
cp mock-google-services.json build-android-start/app/google-services.json
Im letzten Schritt dieses Codelabs erfahren Sie, wie Sie ein echtes Firebase-Projekt und eine Firebase-Android-App erstellen, damit Sie diese simulierte JSON-Datei durch Ihre eigene Konfiguration ersetzen können.
Anwendung ausführen
Nachdem Sie das Projekt in Android Studio importiert und eine Firebase-Konfigurations-JSON-Datei hinzugefügt haben, können Sie die App zum ersten Mal ausführen.
- Starten Sie den Android-Emulator.
- Klicken Sie in Android Studio in der Symbolleiste auf Ausführen ( ).
Die App sollte im Android-Emulator gestartet werden. Jetzt sollte eine leere Nachrichtenliste angezeigt werden und das Senden und Empfangen von Nachrichten funktioniert nicht mehr. Im nächsten Schritt dieses Codelabs authentifizieren Sie Nutzer, damit sie Friendly Chat verwenden können.
6. Authentifizierung aktivieren
Diese App verwendet die Firebase Realtime Database, um alle Chatnachrichten zu speichern. Bevor wir Daten hinzufügen, sollten wir jedoch dafür sorgen, dass die App sicher ist und dass nur authentifizierte Nutzer Nachrichten posten können. In diesem Schritt aktivieren wir Firebase Authentication und konfigurieren Realtime Database-Sicherheitsregeln.
Grundlegende Anmeldefunktion hinzufügen
Als Nächstes fügen wir der App einen grundlegenden Firebase Authentication-Code hinzu, um Nutzer zu erkennen und einen Anmeldebildschirm zu implementieren.
Auf aktuellen Nutzer prüfen
Fügen Sie der Klasse MainActivity.kt
zuerst die folgende Instanzvariable hinzu:
MainActivity.kt
// Firebase instance variables
private lateinit var auth: FirebaseAuth
Ändern wir nun MainActivity
so, dass der Nutzer immer dann zum Anmeldebildschirm weitergeleitet wird, wenn er die App öffnet und nicht authentifiziert ist. Fügen Sie der onCreate()
-Methode Folgendes hinzu, nachdem binding
an die Ansicht angehängt wurde:
MainActivity.kt
// Initialize Firebase Auth and check if the user is signed in
auth = Firebase.auth
if (auth.currentUser == null) {
// Not signed in, launch the Sign In activity
startActivity(Intent(this, SignInActivity::class.java))
finish()
return
}
Außerdem möchten wir prüfen, ob der Nutzer während onStart()
angemeldet ist:
MainActivity.kt
public override fun onStart() {
super.onStart()
// Check if user is signed in.
if (auth.currentUser == null) {
// Not signed in, launch the Sign In activity
startActivity(Intent(this, SignInActivity::class.java))
finish()
return
}
}
Implementieren Sie dann die Methoden getUserPhotoUrl()
und getUserName()
, um die entsprechenden Informationen zum derzeit authentifizierten Firebase-Nutzer zurückzugeben:
MainActivity.kt
private fun getPhotoUrl(): String? {
val user = auth.currentUser
return user?.photoUrl?.toString()
}
private fun getUserName(): String? {
val user = auth.currentUser
return if (user != null) {
user.displayName
} else ANONYMOUS
}
Implementieren Sie dann die Methode signOut()
, um die Schaltfläche „Abmelden“ zu verarbeiten:
MainActivity.kt
private fun signOut() {
AuthUI.getInstance().signOut()
startActivity(Intent(this, SignInActivity::class.java))
finish()
}
Jetzt haben wir die gesamte Logik implementiert, um den Nutzer bei Bedarf zum Anmeldebildschirm weiterzuleiten. Als Nächstes muss der Anmeldebildschirm implementiert werden, damit die Nutzer ordnungsgemäß authentifiziert werden.
Anmeldebildschirm implementieren
Öffnen Sie die Datei SignInActivity.kt
. Hier wird eine einfache Anmeldeschaltfläche verwendet, um die Authentifizierung zu starten. In diesem Abschnitt verwenden Sie FirebaseUI, um die Logik für die Anmeldung zu implementieren.
Fügen Sie in der Klasse SignInActivity
unter dem Kommentar // Firebase instance variables
eine Instanzvariable für Auth hinzu:
SignInActivity.kt
// Firebase instance variables
private lateinit var auth: FirebaseAuth
Bearbeiten Sie dann die Methode onCreate()
, um Firebase genau wie in MainActivity
zu initialisieren:
SignInActivity.kt
// Initialize FirebaseAuth
auth = Firebase.auth
Fügen Sie SignInActivity
das Feld ActivityResultLauncher
hinzu:
SignInActivity.kt
// ADD THIS
private val signIn: ActivityResultLauncher<Intent> =
registerForActivityResult(FirebaseAuthUIActivityResultContract(), this::onSignInResult)
override fun onCreate(savedInstanceState: Bundle?) {
// ...
}
Bearbeiten Sie als Nächstes die Methode onStart()
, um den FirebaseUI-Anmeldevorgang zu starten:
SignInActivity.kt
public override fun onStart() {
super.onStart()
// If there is no signed in user, launch FirebaseUI
// Otherwise head to MainActivity
if (Firebase.auth.currentUser == null) {
// Sign in with FirebaseUI, see docs for more details:
// https://firebase.google.com/docs/auth/android/firebaseui
val signInIntent = AuthUI.getInstance()
.createSignInIntentBuilder()
.setLogo(R.mipmap.ic_launcher)
.setAvailableProviders(listOf(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build(),
))
.build()
signIn.launch(signInIntent)
} else {
goToMainActivity()
}
}
Implementiere als Nächstes die Methode onSignInResult
, um das Anmeldeergebnis zu verarbeiten. Wenn die Anmeldung erfolgreich war, fahren Sie mit MainActivity
fort:
SignInActivity.kt
private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
if (result.resultCode == RESULT_OK) {
Log.d(TAG, "Sign in successful!")
goToMainActivity()
} else {
Toast.makeText(
this,
"There was an error signing in",
Toast.LENGTH_LONG).show()
val response = result.idpResponse
if (response == null) {
Log.w(TAG, "Sign in canceled")
} else {
Log.w(TAG, "Sign in error", response.error)
}
}
}
Geschafft! Sie haben die Authentifizierung mit FirebaseUI in nur wenigen Methodenaufrufen implementiert, ohne dass Sie eine serverseitige Konfiguration verwalten müssen.
Ihre Arbeit testen
Führen Sie die App im Android-Emulator aus. Sie sollten sofort zum Anmeldebildschirm weitergeleitet werden. Tippen Sie auf die Schaltfläche Mit E-Mail-Adresse anmelden und erstellen Sie ein Konto. Wenn alles korrekt implementiert ist, sollten Sie zum Bildschirm für Mitteilungen weitergeleitet werden.
Öffnen Sie nach der Anmeldung die Benutzeroberfläche der Firebase Emulator Suite in Ihrem Browser und klicken Sie auf den Tab Authentifizierung, um das erste angemeldete Nutzerkonto zu sehen.
7. Nachrichten lesen
In diesem Schritt fügen wir Funktionen zum Lesen und Anzeigen von in Realtime Database gespeicherten Nachrichten hinzu.
Beispielnachrichten importieren
- Wählen Sie in der Benutzeroberfläche der Firebase Emulator Suite den Tab Realtime Database aus.
- Ziehen Sie die
initial_messages.json
-Datei per Drag-and-drop aus Ihrer lokalen Kopie des Codelab-Repositorys in die Datenansicht.
Unter dem Knoten messages
der Datenbank sollten jetzt einige Nachrichten angezeigt werden.
Daten lesen
Nachrichten synchronisieren
In diesem Abschnitt fügen wir Code hinzu, mit dem neu hinzugefügte Nachrichten mit der App-UI synchronisiert werden:
- Firebase Realtime Database initialisieren und einen Listener hinzufügen, um Änderungen an den Daten zu verarbeiten
- Der
RecyclerView
-Adapter wird aktualisiert, damit neue Nachrichten angezeigt werden. - Fügen Sie die Datenbankinstanzvariablen mit den anderen Firebase-Instanzvariablen in der Klasse
MainActivity
hinzu:
MainActivity.kt
// Firebase instance variables
// ...
private lateinit var db: FirebaseDatabase
private lateinit var adapter: FriendlyMessageAdapter
Ändern Sie die onCreate()
-Methode der MainActivity unter dem Kommentar // Initialize Realtime Database and FirebaseRecyclerAdapter
in den unten stehenden Code. Mit diesem Code werden alle vorhandenen Nachrichten aus der Realtime Database hinzugefügt und dann auf neue untergeordnete Einträge unter dem Pfad messages
in Ihrer Firebase Realtime Database gewartet. Damit wird der Benutzeroberfläche für jede Nachricht ein neues Element hinzugefügt:
MainActivity.kt
// Initialize Realtime Database
db = Firebase.database
val messagesRef = db.reference.child(MESSAGES_CHILD)
// The FirebaseRecyclerAdapter class and options come from the FirebaseUI library
// See: https://github.com/firebase/FirebaseUI-Android
val options = FirebaseRecyclerOptions.Builder<FriendlyMessage>()
.setQuery(messagesRef, FriendlyMessage::class.java)
.build()
adapter = FriendlyMessageAdapter(options, getUserName())
binding.progressBar.visibility = ProgressBar.INVISIBLE
manager = LinearLayoutManager(this)
manager.stackFromEnd = true
binding.messageRecyclerView.layoutManager = manager
binding.messageRecyclerView.adapter = adapter
// Scroll down when a new message arrives
// See MyScrollToBottomObserver for details
adapter.registerAdapterDataObserver(
MyScrollToBottomObserver(binding.messageRecyclerView, adapter, manager)
)
Als Nächstes implementieren Sie in der FriendlyMessageAdapter.kt
-Klasse die bind()
-Methode innerhalb der inneren Klasse MessageViewHolder()
:
FriendlyMessageAdapter.kt
inner class MessageViewHolder(private val binding: MessageBinding) : ViewHolder(binding.root) {
fun bind(item: FriendlyMessage) {
binding.messageTextView.text = item.text
setTextColor(item.name, binding.messageTextView)
binding.messengerTextView.text = if (item.name == null) ANONYMOUS else item.name
if (item.photoUrl != null) {
loadImageIntoView(binding.messengerImageView, item.photoUrl!!)
} else {
binding.messengerImageView.setImageResource(R.drawable.ic_account_circle_black_36dp)
}
}
...
}
Wir müssen auch Nachrichten anzeigen, die Bilder sind. Daher implementieren wir die Methode bind()
auch in der inneren Klasse ImageMessageViewHolder()
:
FriendlyMessageAdapter.kt
inner class ImageMessageViewHolder(private val binding: ImageMessageBinding) :
ViewHolder(binding.root) {
fun bind(item: FriendlyMessage) {
loadImageIntoView(binding.messageImageView, item.imageUrl!!)
binding.messengerTextView.text = if (item.name == null) ANONYMOUS else item.name
if (item.photoUrl != null) {
loadImageIntoView(binding.messengerImageView, item.photoUrl!!)
} else {
binding.messengerImageView.setImageResource(R.drawable.ic_account_circle_black_36dp)
}
}
}
Starten und beenden Sie abschließend in MainActivity
das Überwachen von Updates aus der Firebase Realtime Database. Aktualisieren Sie die Methoden onPause()
und onResume()
in MainActivity
wie unten gezeigt:
MainActivity.kt
public override fun onPause() {
adapter.stopListening()
super.onPause()
}
public override fun onResume() {
super.onResume()
adapter.startListening()
}
Synchronisierung von Nachrichten testen
- Klicken Sie auf Ausführen ().
- Kehren Sie in der Emulator Suite-Benutzeroberfläche zum Tab Realtime Database zurück und fügen Sie manuell eine neue Nachricht hinzu. Prüfen Sie, ob die Meldung in Ihrer Android-App angezeigt wird:
Herzlichen Glückwunsch, Sie haben Ihrer App gerade eine Echtzeitdatenbank hinzugefügt.
8. Nachrichten senden
Senden von SMS implementieren
In diesem Abschnitt fügen Sie App-Nutzern die Möglichkeit hinzu, SMS zu senden. Das folgende Code-Snippet überwacht Klickereignisse auf die Schaltfläche „Senden“, erstellt ein neues FriendlyMessage
-Objekt mit dem Inhalt des Nachrichtenfelds und sendet die Nachricht an die Datenbank. Mit der Methode push()
wird dem Pfad des übertragenen Objekts eine automatisch generierte ID hinzugefügt. Diese IDs sind sequenziell, sodass die neuen Nachrichten am Ende der Liste hinzugefügt werden.
Aktualisieren Sie den Klick-Listener der Schaltfläche „Senden“ in der Methode onCreate()
in der Klasse MainActivity
. Dieser Code befindet sich bereits unten in der onCreate()
-Methode. Aktualisieren Sie den onClick()
-Text so, dass er dem folgenden Code entspricht:
MainActivity.kt
// Disable the send button when there's no text in the input field
// See MyButtonObserver for details
binding.messageEditText.addTextChangedListener(MyButtonObserver(binding.sendButton))
// When the send button is clicked, send a text message
binding.sendButton.setOnClickListener {
val friendlyMessage = FriendlyMessage(
binding.messageEditText.text.toString(),
getUserName(),
getPhotoUrl(),
null /* no image */
)
db.reference.child(MESSAGES_CHILD).push().setValue(friendlyMessage)
binding.messageEditText.setText("")
}
Senden von Bildnachrichten implementieren
In diesem Abschnitt fügen Sie die Möglichkeit hinzu, dass App-Nutzer Bildnachrichten senden können. So erstellen Sie eine Bildnachricht:
- Wählen Sie ein Bild aus
- Bildauswahl verarbeiten
- Temporäre Bildnachricht in die Realtime Database schreiben
- Upload des ausgewählten Bildes starten
- Aktualisieren Sie die Bildnachrichten-URL auf die URL des hochgeladenen Bildes, sobald der Upload abgeschlossen ist.
Bild auswählen
In diesem Codelab wird Cloud Storage for Firebase verwendet, um Bilder hinzuzufügen. Cloud Storage eignet sich gut für die Speicherung der Binärdaten Ihrer App.
Bildauswahl verarbeiten und temporäre Nachricht schreiben
Nachdem der Nutzer ein Bild ausgewählt hat, wird die Bildauswahl Intent
geöffnet. Dies ist bereits im Code am Ende der onCreate()
-Methode implementiert. Anschließend wird die Methode onImageSelected()
von MainActivity
aufgerufen. Mit dem folgenden Code-Snippet schreiben Sie eine Nachricht mit einer temporären Bild-URL in die Datenbank, die angibt, dass das Bild gerade hochgeladen wird.
MainActivity.kt
private fun onImageSelected(uri: Uri) {
Log.d(TAG, "Uri: $uri")
val user = auth.currentUser
val tempMessage = FriendlyMessage(null, getUserName(), getPhotoUrl(), LOADING_IMAGE_URL)
db.reference
.child(MESSAGES_CHILD)
.push()
.setValue(
tempMessage,
DatabaseReference.CompletionListener { databaseError, databaseReference ->
if (databaseError != null) {
Log.w(
TAG, "Unable to write message to database.",
databaseError.toException()
)
return@CompletionListener
}
// Build a StorageReference and then upload the file
val key = databaseReference.key
val storageReference = Firebase.storage
.getReference(user!!.uid)
.child(key!!)
.child(uri.lastPathSegment!!)
putImageInStorage(storageReference, uri, key)
})
}
Bild hochladen und Nachricht aktualisieren
Fügen Sie MainActivity
die Methode putImageInStorage()
hinzu. Es wird in onImageSelected()
aufgerufen, um den Upload des ausgewählten Bildes zu starten. Sobald der Upload abgeschlossen ist, aktualisieren Sie die Mitteilung, um das entsprechende Bild zu verwenden.
MainActivity.kt
private fun putImageInStorage(storageReference: StorageReference, uri: Uri, key: String?) {
// First upload the image to Cloud Storage
storageReference.putFile(uri)
.addOnSuccessListener(
this
) { taskSnapshot -> // After the image loads, get a public downloadUrl for the image
// and add it to the message.
taskSnapshot.metadata!!.reference!!.downloadUrl
.addOnSuccessListener { uri ->
val friendlyMessage =
FriendlyMessage(null, getUserName(), getPhotoUrl(), uri.toString())
db.reference
.child(MESSAGES_CHILD)
.child(key!!)
.setValue(friendlyMessage)
}
}
.addOnFailureListener(this) { e ->
Log.w(
TAG,
"Image upload task was unsuccessful.",
e
)
}
}
Das Senden von Nachrichten testen
- Klicken Sie in Android Studio auf die Schaltfläche Ausführen.
- Geben Sie im Android-Emulator eine Nachricht ein und tippen Sie dann auf die Schaltfläche zum Senden. Die neue Nachricht sollte in der App-UI und in der Firebase Emulator Suite-UI angezeigt werden.
- Tippen Sie im Android-Emulator auf das Pluszeichen, um ein Bild auf Ihrem Gerät auszuwählen. Die neue Nachricht sollte zuerst mit einem Platzhalterbild und dann mit dem ausgewählten Bild angezeigt werden, sobald der Bildupload abgeschlossen ist. Die neue Nachricht sollte auch in der Emulator Suite-Benutzeroberfläche angezeigt werden, insbesondere als Objekt auf dem Tab „Realtime Database“ (Echtzeitdatenbank) und als Blob auf dem Tab „Storage“ (Speicher).
9. Glückwunsch!
Sie haben gerade mit Firebase eine Echtzeit-Chat-Anwendung erstellt.
Das haben Sie gelernt
- Firebase Authentication
- Firebase Realtime Database
- Cloud Storage for Firebase
Versuchen Sie als Nächstes, das in diesem Codelab Gelernte anzuwenden, um Firebase Ihrer eigenen Android-App hinzuzufügen. Weitere Informationen zu Firebase finden Sie unter firebase.google.com.
Wenn Sie ein echtes Firebase-Projekt einrichten und echte Firebase-Ressourcen verwenden möchten (anstelle eines Demoprojekts und nur emulierter Ressourcen), fahren Sie mit dem nächsten Schritt fort.
Hinweis: Auch nachdem Sie ein echtes Firebase-Projekt eingerichtet haben und besonders wenn Sie mit der Entwicklung einer echten App beginnen, empfehlen wir die Verwendung der Firebase Local Emulator Suite für die Entwicklung und das Testen.
10. Optional: Firebase-Projekt erstellen und einrichten
In diesem Schritt erstellen Sie ein echtes Firebase-Projekt und eine Firebase-Android-App für dieses Codelab. Außerdem fügen Sie Ihrer App die appspezifische Firebase-Konfiguration hinzu. Abschließend richten Sie echte Firebase-Ressourcen für Ihre App ein.
Firebase-Projekt erstellen
- Rufen Sie in Ihrem Browser die Firebase Console auf.
- Wählen Sie Projekt hinzufügen aus.
- Wählen Sie einen Projektnamen aus oder geben Sie ihn ein. Sie können einen beliebigen Namen verwenden.
- Für dieses Codelab ist Google Analytics nicht erforderlich. Daher können Sie die Aktivierung für Ihr Projekt überspringen.
- Klicken Sie auf Projekt erstellen. Wenn Ihr Projekt fertig ist, klicken Sie auf Weiter.
Firebase-Preismodell upgraden
Damit Sie Cloud Storage for Firebase verwenden können, muss für Ihr Firebase-Projekt das „Pay as you go“-Preismodell (Blaze) festgelegt sein. Das bedeutet, dass es mit einem Cloud-Rechnungskonto verknüpft ist.
- Für ein Cloud-Rechnungskonto ist eine Zahlungsmethode erforderlich, z. B. eine Kreditkarte.
- Wenn Sie Firebase und Google Cloud zum ersten Mal verwenden, prüfen Sie, ob Sie Anspruch auf ein Guthaben von 300$und ein kostenloses Cloud-Rechnungskonto für die Testversion haben.
- Wenn Sie dieses Codelab im Rahmen einer Veranstaltung absolvieren, fragen Sie den Organisator, ob Cloud-Guthaben verfügbar ist.
So führen Sie ein Upgrade auf den Blaze-Tarif durch:
- Wählen Sie in der Firebase Console ein Upgrade Ihres Tarifs aus.
- Wählen Sie den Blaze-Tarif aus. Folgen Sie der Anleitung auf dem Bildschirm, um ein Cloud-Rechnungskonto mit Ihrem Projekt zu verknüpfen.
Wenn Sie im Rahmen dieses Upgrades ein Cloud-Rechnungskonto erstellen mussten, müssen Sie möglicherweise zum Upgradevorgang in der Firebase Console zurückkehren, um das Upgrade abzuschließen.
Firebase Ihrem Android-Projekt hinzufügen
Bevor Sie mit diesem Schritt beginnen, rufen Sie den SHA1-Hash Ihrer App ab. Führen Sie den folgenden Befehl in Ihrem lokalen Verzeichnis build-android-start
aus, um den SHA1-Wert Ihres Fehlerbehebungsschlüssels zu ermitteln:
./gradlew signingReport Store: /Users/<username>/.android/debug.keystore Alias: AndroidDebugKey MD5: A5:88:41:04:8F:06:59:6A:AE:33:76:87:AA:AD:19:23 SHA1: A7:89:F5:06:A8:07:A1:22:EC:90:6A:A6:EA:C3:D4:8B:3A:30:AB:18 SHA-256: 05:A2:2A:35:EE:F2:51:23:72:4D:72:67:A5:6A:8A:58:22:2C:00:A6:AB:F6:45:D5:A1:82:D8:90:A4:69:C8:FE Valid until: Wednesday, August 10, 2044
Die Ausgabe sollte in etwa so aussehen: Die wichtige Zeile ist der Hash SHA1
. Wenn Sie Ihren SHA1-Hash nicht finden können, finden Sie hier weitere Informationen.
Kehren Sie zur Firebase Console zurück und führen Sie die folgenden Schritte aus, um Ihr Android-Projekt bei Ihrem Firebase-Projekt zu registrieren:
- Klicken Sie in der Übersicht Ihres neuen Projekts auf das Android-Symbol, um den Einrichtungsworkflow zu starten:
- Geben Sie auf dem nächsten Bildschirm
com.google.firebase.codelab.friendlychat
als Paketnamen für Ihre App ein. - Klicken Sie auf App registrieren und dann auf google-services.json herunterladen, um die Firebase-Konfigurationsdatei herunterzuladen.
- Kopieren Sie die Datei
google-services.json
in das Verzeichnisapp
Ihres Android-Projekts. - Überspringen Sie die nächsten Schritte im Einrichtungsworkflow der Console. Sie wurden bereits im Projekt
build-android-start
für Sie ausgeführt. - Achten Sie darauf, dass alle Abhängigkeiten für Ihre App verfügbar sind, indem Sie Ihr Projekt mit Gradle-Dateien synchronisieren. Wählen Sie in der Android Studio-Symbolleiste File (Datei) > Sync Project with Gradle Files (Projekt mit Gradle-Dateien synchronisieren) aus. Möglicherweise müssen Sie auch Build/Clean Project und Build/Rebuild Project ausführen, damit die Konfigurationsänderungen wirksam werden.
Firebase Authentication konfigurieren
Bevor Ihre App im Namen Ihrer Nutzer auf die Firebase Authentication APIs zugreifen kann, müssen Sie Firebase Authentication und die Anmeldeanbieter aktivieren, die Sie in Ihrer App verwenden möchten.
- Wählen Sie in der Firebase Console im linken Navigationsbereich Authentifizierung aus.
- Wählen Sie den Tab Anmeldemethode aus.
- Klicken Sie auf E-Mail/Passwort und stellen Sie den Schalter auf "Aktiviert" (blau).
- Klicken Sie auf Google, stellen Sie den Schieberegler auf „Aktiviert“ (blau) und geben Sie eine E-Mail-Adresse für den Projektsupport an.
Wenn Sie später in diesem Codelab Fehler mit der Meldung „CONFIGURATION_NOT_FOUND“ erhalten, kehren Sie zu diesem Schritt zurück und überprüfen Sie Ihre Arbeit.
Realtime Database einrichten
Die App in diesem Codelab speichert Chatnachrichten in der Firebase Realtime Database. In diesem Abschnitt erstellen wir eine Datenbank und konfigurieren die Sicherheit über eine JSON-Konfigurationssprache namens Firebase Security Rules.
- Maximieren Sie im linken Bereich der Firebase Console Build und wählen Sie dann Realtime Database aus.
- Klicken Sie auf Datenbank erstellen.
- Wählen Sie einen Speicherort für die Datenbank aus und klicken Sie auf Weiter.
Bei einer echten App sollten Sie einen Standort in der Nähe Ihrer Nutzer auswählen. - Klicken Sie auf Im Testmodus starten. Lesen Sie den Haftungsausschluss zu den Sicherheitsregeln.
In den nächsten Schritten dieses Codelabs fügen Sie Sicherheitsregeln hinzu, um Ihre Daten zu schützen. Veröffentlichen oder verteilen Sie keine App, ohne Sicherheitsregeln für Ihre Datenbank hinzuzufügen. - Klicken Sie auf Erstellen.
- Nachdem die Datenbankinstanz erstellt wurde, wählen Sie den Tab Regeln aus und aktualisieren die Regelkonfiguration wie folgt:
{ "rules": { "messages": { ".read": "auth.uid != null", ".write": "auth.uid != null" } } }
Weitere Informationen zur Funktionsweise von Sicherheitsregeln, einschließlich der Dokumentation zur Variable "auth", finden Sie in der Dokumentation zur Sicherheit von Echtzeitdatenbanken.
Cloud Storage for Firebase einrichten
- Maximieren Sie im linken Bereich der Firebase Console Build und wählen Sie dann Storage aus.
- Klicken Sie auf Starten.
- Wählen Sie einen Speicherort für Ihren Standard-Storage-Bucket aus.
Buckets inUS-WEST1
,US-CENTRAL1
undUS-EAST1
können die Stufe „Immer kostenlos“ für Google Cloud Storage nutzen. Für Buckets an allen anderen Speicherorten gelten die Preise und Nutzungsbedingungen für Google Cloud Storage. - Klicken Sie auf Im Testmodus starten. Lesen Sie den Haftungsausschluss zu den Sicherheitsregeln.
Später in diesem Codelab fügen Sie Sicherheitsregeln hinzu, um Ihre Daten zu schützen. Apps dürfen nicht veröffentlicht oder veröffentlicht werden, ohne Sicherheitsregeln für Ihren Storage-Bucket hinzuzufügen. - Klicken Sie auf Erstellen.
Verbindung zu Firebase-Ressourcen herstellen
In einem früheren Schritt dieses Codelabs haben Sie MainActivity.kt
Folgendes hinzugefügt: Dieser bedingte Block hat Ihr Android-Projekt mit der Firebase Emulator Suite verbunden.
// REMOVE OR DISABLE THIS
if (BuildConfig.DEBUG) {
Firebase.database.useEmulator("10.0.2.2", 9000)
Firebase.auth.useEmulator("10.0.2.2", 9099)
Firebase.storage.useEmulator("10.0.2.2", 9199)
}
Wenn Sie Ihre App mit Ihrem neuen echten Firebase-Projekt und den zugehörigen echten Firebase-Ressourcen verbinden möchten, können Sie entweder diesen Block entfernen oder Ihre App im Release-Modus ausführen, sodass BuildConfig.DEBUG
false
ist.