Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

Firebase AndroidCodelab-フレンドリーなチャットを構築する

スクリーンショット

画像:作業に適したチャットアプリ。

フレンドリーチャットコードラボへようこそ。このコードラボでは、Firebaseプラットフォームを使用してAndroidでチャットアプリを作成する方法を学習します。

あなたが学ぶこと

  • FirebaseAuthenticationを使用してユーザーがサインインできるようにする方法。
  • Firebase RealtimeDatabaseを使用してデータを同期する方法。
  • Cloud Storage forFirebaseにバイナリファイルを保存する方法。
  • Firebase Local EmulatorSuiteを使用してFirebaseでAndroidアプリを開発する方法。

必要なもの

  • Androidのスタジオバージョン4.2 +。
  • Android5.0以降を搭載したAndroidエミュレーター
  • Java7以降。 Javaをインストールするには、次の手順を使用します。バージョンを確認するには、 java -version versionを実行しjava -version
  • Kotlinプログラミング言語に精通していること。

リポジトリのクローンを作成する

コマンドラインからGitHubリポジトリのクローンを作成します。

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

AndroidStudioにインポートする

Android Studioで、[ファイル] > [開く]を選択し、 build-android-startディレクトリを選択します( android_studio_folder )サンプルコードをダウンロードしたディレクトリから。

これで、 build-android-startプロジェクトがAndroidStudioで開かれているはずです。 google-services.jsonファイルが見つからないという警告が表示されても、心配する必要はありません。後のステップで追加されます。

依存関係を確認する

このコードラボでは、必要なすべての依存関係がすでに追加されていますが、FirebaseSDKをアプリに追加する方法を理解することが重要です。

build.gradle

buildscript {
    // ...

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.2'

        // The google-services plugin is required to parse the google-services.json file
        classpath 'com.google.gms:google-services:4.3.5'
    }
}

app / build.gradle

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:19.0.0'

    // Firebase SDK
    implementation platform('com.google.firebase:firebase-bom:26.6.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:7.2.0'
    implementation 'com.firebaseui:firebase-ui-database:7.2.0'
}

Firebase Emulator Suiteを実行するには、 FirebaseCLIをインストールして使用する必要があります

CLIをインストールします

オプション1-npmでインストール

マシンにNode.jsとnpmが既にインストールされている場合は、次のコマンドを使用してCLIをインストールできます。

npm install -g firebase-tools@latest

オプション2-スタンドアロンバイナリをインストールする

Node.js / npmをお持ちでない場合、またはアプリ開発を初めて使用する場合は、こちらのプラットフォームの手順に従って、CLIをスタンドアロンバイナリとしてインストールできます

インストールを確認してください

Firebase CLIをインストールしたら、次のコマンドを実行して、バージョン9.11.0以降を使用していることを確認します。

firebase --version

エミュレータを起動します

ターミナルで、ローカルの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 SuiteUIを表示します。

エミュレータースイートUIホーム

残りのコードラボでは、 emulators:startコマンドを実行したままにしemulators:start

アプリを接続する

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

google-services.jsonを追加します

AndroidアプリをFirebaseに接続するには、Androidプロジェクトのappフォルダー内にgoogle-services.jsonファイルを追加する必要があります。このコードラボの目的のために、Firebase EmulatorSuiteに接続できるようにするモックJSONファイルを提供しました。

mock-google-services.jsonファイルをgoogle-services.jsonとしてbuild-android-start/appフォルダーにコピーしgoogle-services.json

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

このコードラボの最後のステップでは、実際のFirebaseプロジェクトとFirebase Androidアプリを作成して、このモックJSONファイルを独自の構成に置き換える方法を学習します。

アプリを実行する

プロジェクトをAndroidStudioにインポートし、Firebase構成のJSONファイルを追加したので、アプリを初めて実行する準備が整いました。

  1. Androidエミュレータを起動します。
  2. Android Studioで、[実行]をクリックします実行する )ツールバーで。

アプリはAndroidエミュレーターで起動するはずです。この時点で、空のメッセージリストが表示され、メッセージの送受信は機能しません。このコードラボの次のステップでは、ユーザーがフレンドリーチャットを使用できるようにユーザーを認証します。

このアプリは、Firebase RealtimeDatabaseを使用してすべてのチャットメッセージを保存します。ただし、データを追加する前に、アプリが安全であり、認証されたユーザーのみがメッセージを投稿できることを確認する必要があります。このステップでは、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()中にユーザーがサインインしているかどう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インスタンス変数を追加します。

SignInActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

次に、 onCreate()メソッドを編集して、 MainActivity行ったのと同じ方法でFirebaseを初期化します。

SignInActivity.kt

// Initialize FirebaseAuth
auth = Firebase.auth

SignInActivity ActivityResultLauncherフィールドを追加しSignInActivity

SignInActivity.kt

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

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

次に、 onStart()メソッドを編集して、FirebaseUIサインインフローを開始します。

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

次に、 onSignInResultメソッドを実装して、サインイン結果を処理します。サインインの結果が成功した場合は、 MainActivityます。

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

それでおしまい!ほんの数回のメソッド呼び出しで、サーバー側の構成を管理する必要なしに、FirebaseUIを使用した認証を実装しました。

あなたの仕事をテストする

Androidエミュレーターでアプリを実行します。すぐにサインイン画面に移動します。 [メールでサインイン]ボタンタップして、アカウントを作成します。すべてが正しく実装されている場合は、メッセージング画面に移動する必要があります。

サインインした後、ブラウザでFirebase Emulator Suite UIを開き、[認証]タブをクリックして、この最初にサインインしたユーザーアカウントを表示します。

このステップでは、RealtimeDatabaseに保存されているメッセージを読み取って表示する機能を追加します。

サンプルメッセージをインポートする

  1. Firebase Emulator Suite UIで、[リアルタイムデータベース]タブを選択します。
  2. initial_messages.jsonファイルをcodelabリポジトリのローカルコピーからデータビューアにドラッグアンドドロップします。

これで、データベースのmessagesノードの下にいくつかのメッセージが表示されます。

データの読み取り

メッセージを同期する

このセクションでは、新しく追加されたメッセージをアプリのUIに同期するコードを次の方法で追加します。

  • Firebase Realtime Databaseを初期化し、データに加えられた変更を処理するリスナーを追加します。
  • 新しいメッセージが表示されるようにRecyclerViewアダプターを更新します。
  • MainActivityクラスの他のFirebaseインスタンス変数と一緒にデータベースインスタンス変数を追加します。

MainActivity.kt

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

コメントの下にあるMainActivityのonCreate()メソッドを変更します// Initialize Realtime Database and FirebaseRecyclerAdapter以下に定義されているコードで// Initialize Realtime Database and FirebaseRecyclerAdapter// Initialize Realtime Database and FirebaseRecyclerAdapterます。このコードは、Realtime Databaseからの既存のすべてのメッセージを追加してから、Firebase RealtimeDatabaseの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()メソッドを実装します。

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

また、画像であるメッセージを表示する必要があるため、内部クラスImageMessageViewHolder()内にbind()メソッドも実装します。

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

最後に、 MainActivityに戻り、Firebase RealtimeDatabaseからの更新のリッスンを開始および停止します。更新onPause()onResume()のメソッドMainActivity次のように:

MainActivity.kt

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

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

同期メッセージをテストする

  1. [実行]をクリックします実行する )。
  2. Emulator Suite UIで、[リアルタイムデータベース]タブに戻り、手動で新しいメッセージを追加します。メッセージがAndroidアプリに表示されることを確認します。

おめでとうございます。アプリにリアルタイムデータベースを追加しました。

テキストメッセージ送信を実装する

このセクションでは、アプリユーザーがテキストメッセージを送信する機能を追加します。以下のコードスニペットは、送信ボタンのクリックイベントをリッスンし、メッセージフィールドの内容を使用して新しいFriendlyMessageオブジェクトを作成し、メッセージをデータベースにプッシュします。 push()メソッドは、自動的に生成されたIDをプッシュされたオブジェクトのパスに追加します。これらのIDはシーケンシャルであるため、新しいメッセージがリストの最後に追加されます。

MainActivityクラスのonCreate()メソッドで送信ボタンのクリックリスナーを更新します。このコードはすでに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に更新します

画像を選択

このコードラボでは、画像を追加するためにCloud Storage forFirebaseを使用しています。クラウドストレージは、アプリのバイナリデータを保存するのに適した場所です。

画像選択を処理し、一時メッセージを書き込む

ユーザーが画像を選択すると、画像選択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追加しMainActivityonImageSelected()呼び出され、選択した画像のアップロードを開始します。アップロードが完了したら、適切な画像を使用するようにメッセージを更新します。

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 Emulator SuiteUIに表示されます。
  3. Androidエミュレーターで、「+」画像をタップして、デバイスから画像を選択します。新しいメッセージは、最初にプレースホルダー画像で表示され、画像のアップロードが完了すると、選択した画像で表示されます。新しいメッセージは、Emulator Suite UIにも表示されます。具体的には、[リアルタイムデータベース]タブのオブジェクトおよび[ストレージ]タブのblobとして表示されます。

Firebaseを使用してリアルタイムチャットアプリケーションを構築しました。

あなたが学んだこと

  • Firebase認証
  • Firebaseリアルタイムデータベース
  • Firebase用のクラウドストレージ

次に、このコードラボで学んだことを使用して、Firebaseを独自のAndroidアプリに追加してみてください。よりFirebaseについて学ぶために、訪問firebase.google.comを

実際のFirebaseプロジェクトを設定し、(デモプロジェクトとエミュレートされたリソースのみではなく)実際のFirebaseリソースを使用する方法を学びたい場合は、次の手順に進みます。

注:実際のFirebaseプロジェクトを設定した後でも、特に実際のアプリの作成を開始した場合でも、開発とテストにはFirebase Local EmulatorSuiteを使用することをおすすめします。

このステップでは、このコードラボで使用する実際のFirebaseプロジェクトとFirebaseAndroidアプリを作成します。また、アプリ固有のFirebase構成をアプリに追加します。最後に、アプリで使用する実際のFirebaseリソースを設定します。

Firebaseプロジェクトを作成する

  1. ブラウザで、 Firebaseコンソールに移動します。
  2. [プロジェクトの追加]を選択します
  3. プロジェクト名を選択または入力します。任意の名前を使用できます。
  4. このコードラボにはGoogleAnalyticsは必要ないため、プロジェクトでの有効化をスキップできます。
  5. [プロジェクトの作成]をクリックします。プロジェクトの準備ができたら、[続行]をクリックします。

AndroidプロジェクトにFirebaseを追加する

この手順を開始する前に、アプリの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アイコンをクリックして、セットアップワークフローを起動します。 Androidアプリを追加
  2. 次の画面で、アプリのパッケージ名としてcom.google.firebase.codelab.friendlychatと入力します。
  3. [アプリの登録]をクリックし、[ Google-services.jsonのダウンロード]をクリックしてFirebase構成ファイルをダウンロードします。
  4. google-services.jsonファイルをAndroidプロジェクトのappディレクトリにコピーします。
  5. コンソールのセットアップワークフローに示されている次の手順をスキップします(これらはbuild-android-startプロジェクトですでに実行されています)。
  6. プロジェクトをGradleファイルと同期して、アプリですべての依存関係を利用できることを確認します。 Android Studioツールバーから、[ファイル] > [プロジェクトをGradleファイルと同期]を選択します

Firebase認証を構成する

アプリがユーザーに代わってFirebaseAuthentication APIにアクセスする前に、FirebaseAuthenticationとアプリで使用するサインインプロバイダーを有効にする必要があります。

  1. Firebaseコンソールで、左側のナビゲーションパネルから[認証]を選択します。
  2. [サインイン方法]タブを選択します。
  3. [電子メール/パスワード]をクリックしてから、スイッチを有効(青)に切り替えます。
  4. [ Google]をクリックし、スイッチを有効(青)に切り替えて、プロジェクトサポートメールを設定します。

このコードラボの後半で「CONFIGURATION_NOT_FOUND」というメッセージが表示されたエラーが発生した場合は、この手順に戻って作業を再確認してください。

リアルタイムデータベースの構成

このコードラボのアプリは、チャットメッセージをFirebase RealtimeDatabaseに保存します。このセクションでは、データベースを作成し、Firebase SecurityRulesと呼ばれるJSON構成言語を使用してそのセキュリティを構成します。

  1. Firebaseコンソールで、左側のナビゲーションパネルから[リアルタイムデータベース]を選択します。
  2. [データベースの作成]をクリックして、新しいRealtimeDatabaseインスタンスを作成します。プロンプトが表示されたら、 us-central1リージョンを選択し、[次へ]をクリックします。
  3. セキュリティルールについてプロンプトが表示されたら、ロックモードを選択し、[有効にする]をクリックします。
  4. データベースインスタンスが作成されたら、[ルール]タブを選択し、次のようにルール構成を更新します:
     {
       "rules": {
         "messages": {
           ".read": "auth.uid != null",
           ".write": "auth.uid != null"
         }
       }
     }
    

セキュリティルールの仕組み(「auth」変数に関するドキュメントを含む)の詳細については、リアルタイムデータベースのセキュリティドキュメントを参照してください。

Firebase用にクラウドストレージを構成する

  1. Firebaseコンソールで、左側のナビゲーションパネルから[ストレージ]を選択します。
  2. [開始]をクリックして、プロジェクトでクラウドストレージを有効にします。
  3. ダイアログの手順に従って、推奨されるデフォルトを使用してバケットを設定します。

Firebaseリソースに接続する

このコードラボの初期の段階では、次のように追加MainActivity.kt 。この条件付きブロックは、AndroidプロジェクトをFirebase EmulatorSuiteに接続しました。

// 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なるようにしfalse