Firebase Android Codelab - 建立友善的聊天

1. 概述

螢幕截圖

圖片:工作友好的聊天應用程式。

歡迎來到友善聊天代碼實驗室。在此 Codelab 中,您將學習如何使用 Firebase 平台在 Android 上建立聊天應用程式。

你將學到什麼

  • 如何使用 Firebase 身份驗證允許使用者登入。
  • 如何使用 Firebase 即時資料庫同步資料。
  • 如何在 Cloud Storage for Firebase 中儲存二進位檔案。
  • 如何使用 Firebase 本機模擬器套件透過 Firebase 開發 Android 應用程式。

你需要什麼

  • 最新的Android Studio版本。
  • 帶有 Android 5.0+ 的Android 模擬器
  • Node.js 版本 10 或更高版本(以使用模擬器套件)。
  • Java 8 或更高版本。要安裝 Java,請使用這些說明;若要檢查您的版本,請執行java -version
  • 熟悉 Kotlin 程式語言。

2. 取得範例程式碼

克隆儲存庫

從命令列克隆 GitHub 儲存庫:

$ git clone https://github.com/firebase/codelab-friendlychat-android

導入Android Studio

在 Android Studio 中,選擇File > Open ,然後選擇build-android-start目錄 ( android_studio_folder )從您下載範例程式碼的目錄中。

您現在應該在 Android Studio 中開啟build-android-start專案。如果您看到有關google-services.json檔案遺失的警告,請不要擔心。它將在稍後的步驟中添加。

檢查依賴關係

在此 Codelab 中,您需要的所有依賴項均已添加,但了解如何將 Firebase SDK 添加到您的應用程式中非常重要:

建置.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
}

應用程式/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

在此 Codelab 中,您將使用Firebase Emulator Suite在本機模擬 Firebase Auth、即時資料庫和雲端儲存。這提供了一個安全、快速且免費的本機開發環境來建立您的應用程式。

安裝 Firebase CLI

首先,您需要安裝Firebase CLI 。如果您使用的是 macOS 或 Linux,則可以執行以下 cURL 命令:

curl -sL https://firebase.tools | bash

如果您使用的是 Windows,請閱讀安裝說明以取得獨立的二進位檔案或透過npm安裝。

安裝 CLI 後,運行firebase --version應回報9.0.0或更高版本:

$ firebase --version
9.0.0

登入

執行firebase login將 CLI 連接到您的 Google 帳戶。這將開啟一個新的瀏覽器視窗以完成登入程序。確保選擇您先前建立 Firebase 專案時使用的相同帳戶。

4. 連接 Firebase 模擬器套件

啟動模擬器

在終端機中,從本地codelab-friendlychat-android目錄的根目錄執行以下命令:

firebase emulators:start --project=demo-friendlychat-android

您應該會看到一些像這樣的日誌。連接埠值在firebase.json檔案中定義,該檔案包含在克隆的範例程式碼中。

$ 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.

在 Web 瀏覽器中導航至http://localhost:4000以查看 Firebase Emulator Suite UI:

模擬器套件 UI 首頁

emulators:start命令在 Codelab 的其餘部分運行。

連接您的應用程式

在 Android Studio 中,開啟MainActivity.kt ,然後在onCreate方法中加入以下程式碼:

// 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. 運行啟動應用程式

新增 google-services.json

為了讓您的 Android 應用程式連接到 Firebase,您必須在 Android 專案的app資料夾中新增google-services.json檔案。出於本 Codelab 的目的,我們提供了一個模擬 JSON 文件,該文件將允許您連接到 Firebase 模擬器套件。

mock-google-services.json檔案複製到build-android-start/app資料夾中作為google-services.json

cp mock-google-services.json build-android-start/app/google-services.json

在此 Codelab 的最後一步中,您將學習如何建立真正的 Firebase 專案和 Firebase Android 應用,以便您可以使用自己的配置來取代此模擬 JSON 檔案。

運行應用程式

現在您已將專案匯入 Android Studio 並新增了 Firebase 配置 JSON 文件,您已準備好首次運行該應用程式。

  1. 啟動您的 Android 模擬器。
  2. 在 Android Studio 中,按一下執行( 執行 )在工具列中。

該應用程式應該在您的 Android 模擬器上啟動。此時,您應該看到一個空的訊息列表,並且發送和接收訊息將無法運作。在此 Codelab 的下一步中,您將對使用者進行身份驗證,以便他們可以使用友善聊天。

6. 啟用身份驗證

此應用程式將使用 Firebase 即時資料庫來儲存所有聊天訊息。不過,在新增資料之前,我們應該確保應用程式是安全的,並且只有經過驗證的使用者才能發布訊息。在此步驟中,我們將啟用 Firebase 驗證並配置即時資料庫安全性規則。

新增基本登入功能

接下來,我們將向應用程式添加一些基本的 Firebase 身份驗證程式碼,以偵測使用者並實現登入畫面。

檢查當前用戶

首先將下列實例變數加入MainActivity.kt類別:

MainActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

現在,讓我們修改MainActivity ,以便在使用者開啟應用程式且未經身份驗證時將其傳送到登入畫面。將binding附加到視圖後,將下列內容新增至onCreate()方法:

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
}

我們也想檢查使用者是否在onStart()期間登入:

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
    }
}

然後實作getUserPhotoUrl()getUserName()方法以傳回目前經過驗證的 Firebase 使用者的對應資訊:

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
}

然後實作signOut()方法來處理註銷按鈕:

MainActivity.kt

private fun signOut() {
    AuthUI.getInstance().signOut()
    startActivity(Intent(this, SignInActivity::class.java))
    finish()
}

現在,我們已準備好所有邏輯,以便在必要時將使用者傳送到登入畫面。接下來我們需要實作登入畫面以正確驗證使用者身分。

實施登入畫面

開啟檔案SignInActivity.kt 。這裡使用一個簡單的登入按鈕來啟動身份驗證。在本部分中,您將使用 FirebaseUI 實作登入邏輯。

// Firebase instance variables註解下的SignInActivity類別中新增 Auth 實例變數:

登入活動.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

然後,編輯onCreate()方法以按照與MainActivity中相同的方式初始化 Firebase:

登入活動.kt

// Initialize FirebaseAuth
auth = Firebase.auth

ActivityResultLauncher欄位新增至SignInActivity

登入活動.kt

// ADD THIS
private val signIn: ActivityResultLauncher<Intent> =
        registerForActivityResult(FirebaseAuthUIActivityResultContract(), this::onSignInResult)

override fun onCreate(savedInstanceState: Bundle?) {
    // ...
}

接下來,編輯onStart()方法以啟動 FirebaseUI 登入流程:

登入活動.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()
    }
}

接下來,實作onSignInResult方法來處理登入結果。如果登入結果成功,則繼續進入MainActivity

登入活動.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)
        }
    }
}

就是這樣!您只需幾次方法呼叫即可使用 FirebaseUI 實現身份驗證,而無需管理任何伺服器端配置。

測試你的工作

在 Android 模擬器上運行該應用程式。您應該立即轉到登入畫面。點擊使用電子郵件登入按鈕,然後建立帳戶。如果一切都正確實施,您應該會被發送到訊息螢幕。

登入後,在瀏覽器中開啟 Firebase Emulator Suite UI,然後按一下「驗證」標籤以查看第一個登入的使用者帳戶。

7. 閱讀訊息

在此步驟中,我們將新增讀取和顯示即時資料庫中儲存的訊息的功能。

導入範例訊息

  1. 在 Firebase Emulator Suite UI 中,選擇「即時資料庫」標籤。
  2. initial_messages.json檔案從 Codelab 儲存庫的本機副本拖曳到資料檢視器中。

現在,資料庫的messages節點下應該有一些訊息。

讀取數據

同步訊息

在本節中,我們新增程式碼,透過以下方式將新新增的訊息同步到應用程式 UI:

  • 初始化 Firebase 即時資料庫並新增偵聽器來處理對資料所做的變更。
  • 更新RecyclerView適配器以便顯示新訊息。
  • 將資料庫實例變數與MainActivity類別中的其他 Firebase 實例變數一起新增:

MainActivity.kt

// Firebase instance variables
// ...
private lateinit var db: FirebaseDatabase
private lateinit var adapter: FriendlyMessageAdapter

使用下面定義的程式碼修改註解// Initialize Realtime Database and FirebaseRecyclerAdapter下 MainActivity 的onCreate()方法。此程式碼會新增即時資料庫中的所有現有訊息,然後偵聽 Firebase 即時資料庫中messages路徑下的新子項目。它為每條訊息添加一個新元素到 UI:

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)
)

接下來在FriendlyMessageAdapter.kt類別中實作內部類別MessageViewHolder()中的bind()方法:

友善訊息適配器.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)
        }
    }
    ...
}

我們還需要顯示圖像訊息,因此還要在內部類別ImageMessageViewHolder()中實作bind()方法:

友善訊息適配器.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)
        }
    }
}

最後,返回MainActivity ,開始和停止偵聽 Firebase 即時資料庫的更新。更新MainActivity中的onPause()onResume()方法,如下所示:

MainActivity.kt

public override fun onPause() {
    adapter.stopListening()
    super.onPause()
}

public override fun onResume() {
    super.onResume()
    adapter.startListening()
}

測試同步訊息

  1. 點擊運行執行 )。
  2. 在模擬器套件 UI 中,傳回「即時資料庫」選項卡,然後手動新增訊息。確認該訊息顯示在您的 Android 應用程式中:

恭喜,您剛剛將即時資料庫新增至您的應用程式!

8. 發送訊息

實現簡訊發送

在本部分中,您將為應用程式使用者添加發送簡訊的功能。下面的程式碼片段偵聽發送按鈕上的點擊事件,使用訊息欄位的內容建立一個新的FriendlyMessage對象,並將訊息推送到資料庫。 push()方法將自動產生的 ID 新增到推送物件的路徑中。這些 ID 是連續的,確保新訊息將添加到清單的末尾。

MainActivity類別的onCreate()方法中更新發送按鈕的點擊監聽器。此程式碼已位於onCreate()方法的底部。更新onClick()主體以符合以下程式碼:

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("")
}

實現圖片訊息發送

在本部分中,您將為應用程式使用者新增發送圖像訊息的功能。建立圖像訊息透過以下步驟完成:

  • 選擇圖片
  • 處理影像選擇
  • 將臨時影像訊息寫入即時資料庫
  • 開始上傳選定的圖像
  • 上傳完成後,將圖像訊息 URL 更新為上傳圖像的 URL

選擇影像

為了新增映像,此 Codelab 使用 Cloud Storage for Firebase。雲端儲存是儲存應用程式二進位資料的好地方。

處理影像選擇並寫入臨時訊息

一旦使用者選擇了圖像,就會啟動圖像選擇Intent 。這已經在onCreate()方法末尾的程式碼中實作了。完成後,它會呼叫MainActivityonImageSelected()方法。使用下面的程式碼片段,您將向資料庫寫入一條帶有臨時圖像 URL 的訊息,指示圖像正在上傳。

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)
                    })
}

上傳圖片並更新訊息

將方法putImageInStorage()加入MainActivity 。在onImageSelected()中呼叫它來啟動所選影像的上傳。上傳完成後,您將更新訊息以使用適當的圖像。

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
            )
        }
}

測試發送訊息

  1. 在 Android Studio 中,按一下執行運行按鈕。
  2. 在 Android 模擬器中,輸入訊息,然後點擊發送按鈕。新訊息應該在應用程式 UI 和 Firebase 模擬器套件 UI 中可見。
  3. 在 Android 模擬器中,點擊「+」影像以從您的裝置中選擇影像。新訊息應先顯示佔位符圖像,然後在圖像上傳完成後顯示所選圖像。新訊息也應該在模擬器套件 UI 中可見,特別是作為「即時資料庫」標籤中的物件和「儲存」標籤中的 blob。

9. 恭喜!

您剛剛使用 Firebase 建立了一個即時聊天應用程式!

你學到了什麼

  • Firebase 身份驗證
  • Firebase 即時資料庫
  • Firebase 雲端儲存

接下來,嘗試使用您在此 Codelab 中學到的知識將 Firebase 添加到您自己的 Android 應用中!要了解有關 Firebase 的更多信息,請訪問firebase.google.com

如果您想了解如何設定真實的Firebase 專案並使用真實的Firebase 資源(而不是演示專案和模擬資源),請繼續執行下一步。

注意:即使您設定了真正的 Firebase 項目,特別是當您開始建立真正的應用程式時,我們也建議您使用 Firebase 本機模擬器套件進行開發和測試。

10. 可選:建立並設定 Firebase 項目

在此步驟中,您將建立一個真正的 Firebase 專案和一個用於此 Codelab 的 Firebase Android 應用程式。您還需要將應用程式特定的 Firebase 設定新增到您的應用程式中。最後,您將設定真正的 Firebase 資源以與您的應用程式一起使用。

創建 Firebase 項目

  1. 在瀏覽器中,前往Firebase 控制台
  2. 選擇新增項目
  3. 選擇或輸入項目名稱。您可以使用任何您想要的名稱。
  4. 此 Codelab 不需要 Google Analytics,因此您可以跳過為您的專案啟用它。
  5. 按一下「建立專案」 。當您的專案準備就緒時,按一下「繼續」

將 Firebase 新增到您的 Android 項目

在開始此步驟之前,請取得應用程式的 SHA1 雜湊值。從本機build-android-start目錄執行以下命令來決定調試金鑰的 SHA1:

./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

您應該會看到類似上面的一些輸出。重要的一行是SHA1哈希值。如果您無法找到 SHA1 雜湊值,請參閱此頁面以了解更多資訊。

返回 Firebase 控制台,然後按照以下步驟將您的 Android 專案註冊到 Firebase 專案:

  1. 在新專案的概述畫面中,按一下 Android 圖示以啟動設定工作流程: 新增安卓應用程式
  2. 在下一個畫面上,輸入com.google.firebase.codelab.friendlychat作為應用程式的套件名稱。
  3. 點擊Register App ,然後點擊Download google-services.json以下載您的 Firebase 設定檔。
  4. google-services.json檔案複製到 Android 專案的app目錄中。
  5. 跳過控制台設定工作流程中顯示的後續步驟(這些步驟已在build-android-start專案中為您完成)。
  6. 透過將項目與 Gradle 檔案同步,確保所有相依性均可用於您的應用程式。從 Android Studio 工具列中,選擇File > Sync Project with Gradle Files 。您可能還需要執行建置/清理專案建置/重建專案才能進行設定變更。

配置 Firebase 身份驗證

在您的應用程式可以代表使用者存取 Firebase 驗證 API 之前,您需要啟用 Firebase 驗證以及要在應用程式中使用的登入提供者。

  1. Firebase 控制台中,從左側導覽面板中選擇身份驗證
  2. 選擇登入方法標籤。
  3. 點擊電子郵件/密碼,然後將開關切換為啟用(藍色)。
  4. 按一下Google ,然後將開關切換為啟用(藍色)並設定專案支援電子郵件。

如果您稍後在此 Codelab 中遇到錯誤並顯示訊息“CONFIGURATION_NOT_FOUND”,請返回此步驟並仔細檢查您的工作。

配置即時資料庫

此 Codelab 中的應用程式將聊天訊息儲存在 Firebase 即時資料庫中。在本部分中,我們將建立一個資料庫並透過稱為 Firebase 安全性規則的 JSON 配置語言來配置其安全性。

  1. Firebase 控制台中,從左側導覽面板中選擇即時資料庫
  2. 點擊建立資料庫以建立新的即時資料庫實例。出現提示時,選擇us-central1區域,然後按一下Next
  3. 當提示有關安全性規則時,選擇鎖定模式,然後按一下啟用
  4. 建立資料庫實例後,選擇「規則」標籤,然後使用下列內容更新規則配置:
     {
       "rules": {
         "messages": {
           ".read": "auth.uid != null",
           ".write": "auth.uid != null"
         }
       }
     }
    

有關安全規則如何運作的更多資訊(包括有關「auth」變數的文件),請參閱即時資料庫安全文件

為 Firebase 配置雲端存儲

  1. Firebase 控制台中,從左側導覽面板中選擇儲存
  2. 點擊開始為您的專案啟用雲端儲存。
  3. 按照對話方塊中的步驟使用建議的預設值設定您的儲存桶。

連線到 Firebase 資源

在此 Codelab 的前面步驟中,您將以下內容新增至MainActivity.kt 。此條件區塊將您的 Android 專案連接到 Firebase Emulator Suite。

// 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)
}

如果您想將您的應用程式連接到新的真實Firebase 專案及其真實Firebase 資源,您可以刪除此區塊或在發布模式下執行您的應用程式,以便BuildConfig.DEBUGfalse