Firebase AndroidCodelab-友好的なチャットを構築する

1。概要

スクリーンショット

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

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

あなたが学ぶこと

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

必要なもの

  • Androidのスタジオバージョン4.2 +。
  • アンAndroidのエミュレータのAndroid 5.0+で。
  • Java7以降。インストールするにはJavaはこれらの使用説明書を。お使いのバージョン、実行確認するjava -version
  • Kotlinプログラミング言語に精通していること。

2.サンプルコードを取得します

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

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

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

AndroidStudioにインポートする

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

あなたは今持っている必要がありますbuild-android-startのAndroid Studioで開いているプロジェクトを。あなたはについての警告が表示される場合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'
}

3. FirebaseCLIをインストールします

実行するためにはFirebaseエミュレータスイートを、あなたがインストールして使用する必要がありますFirebase CLIを

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

4. Firebase EmulatorSuiteに接続します

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

あなたのターミナルでは、あなたの地元のルートから次のコマンドを実行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.

移動します。http:// localhostを:4000 FirebaseエミュレータスイートUIを表示するために、Webブラウザで:

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

ままemulators:startコマンドは、コードラボの残りのために実行されています。

アプリを接続する

Androidのメーカーでは、オープン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を追加します

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

コピーmock-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のメーカーでは、([実行]クリックします実行する)ツールバーで。

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

6.認証を有効にする

このアプリは、Firebase RealtimeDatabaseを使用してすべてのチャットメッセージを保存します。ただし、データを追加する前に、アプリが安全であり、認証されたユーザーのみがメッセージを投稿できることを確認する必要があります。このステップでは、Firebase認証を有効にし、リアルタイムデータベースセキュリティルールを構成します。

基本的なサインイン機能を追加する

次に、基本的なFirebase認証コードをアプリに追加して、ユーザーを検出し、ログイン画面を実装します。

現在のユーザーを確認します

最初に以下のインスタンス変数を追加しMainActivity.ktクラス:

MainActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

今度は変更せMainActivity 、彼らはアプリを開いて、認証されていない場合は常にサインイン画面にユーザーを送信します。以下を追加onCreate()の後メソッドbindingビューに添付されています。

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を使用してサインインのロジックを実装します。

で認証インスタンス変数を追加しSignInActivity下のクラス// Firebase instance variablesコメント:

SignInActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

その後、編集onCreate()メソッドは、あなたがやったのと同じ方法でFirebaseを初期化するMainActivity

SignInActivity.kt

// Initialize FirebaseAuth
auth = Firebase.auth

追加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エミュレータスイートUIを開きます。

7.メッセージを読む

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

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

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

あなたは今の下で、いくつかのメッセージを持っている必要がありmessagesデータベースのノード。

データの読み取り

メッセージを同期する

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

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

MainActivity.kt

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

あなたのMainActivityの変更onCreate()コメントの下でメソッドを// Initialize Realtime Database and FirebaseRecyclerAdapter以下に定義されたコードで。このコードは、リアルタイムデータベースからすべての既存のメッセージを追加し、下に新しい子エントリをリッスンするmessagesあなたのFirebaseリアルタイムデータベースのパス。各メッセージの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クラス実装bind()内部クラス内のメソッドを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)
        }
    }
    ...
}

我々はまた、そうも実装し、イメージで表示するメッセージに必要なbind()内部クラス内のメソッド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)
        }
    }
}

最後に、バックMainActivity 、Firebaseリアルタイムデータベースからの更新を開始し、ストップリスニング。更新onPause()onResume()のメソッドMainActivity次のように:

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はシーケンシャルであるため、新しいメッセージがリストの最後に追加されます。

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

9.おめでとうございます!

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

あなたが学んだこと

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

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

あなたが本当のFirebaseプロジェクトを設定し、(代わりにデモプロジェクトのみエミュレート資源の)本当のFirebaseリソースを使用する方法を学習したい場合は、次の手順に進みます。

注:あなたが本当のアプリケーションを構築し始める場合は特に、あなたが本当のFirebaseプロジェクトをセットアップした後も及び、我々は開発とテストのためにFirebaseローカルエミュレータスイートを使用することをお勧めします。

10.オプション:Firebaseプロジェクトを作成して設定します

このステップでは、このコードラボで使用する実際の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. 登録アプリケーション]クリックし、お使いのFirebaseコンフィギュレーションファイルをダウンロードするためのダウンロードグーグル・services.jsonをクリックします。
  4. コピーgoogle-services.jsonにファイルをappあなたのAndroidプロジェクトのディレクトリ。
  5. (彼らは既にあなたのために行われてきた、コンソールのセットアップのワークフローに示される次のステップをスキップしbuild-android-startプロジェクト)。
  6. プロジェクトをGradleファイルと同期して、アプリですべての依存関係を利用できることを確認します。アンドロイドStudioのツールバーから、[ファイル]> [Gradleのファイルと同期するプロジェクトを選択します。

Firebase認証を構成する

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

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

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

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

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

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

セキュリティルール作品(「認証」変数に関するドキュメントを含む)方法の詳細については、リアルタイムデータベースセキュリティのドキュメントを

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

  1. Firebaseコンソール、左側のナビゲーションパネルから[Storage]を選択します。
  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.DEBUGあるfalse