1. 概要
画像: 実用的な Chat アプリ。
「フレンドリー チャット」Codelab へようこそ。この Codelab では、Firebase プラットフォームを使用して Android でチャットアプリを作成する方法を学びます。
学習内容
- Firebase Authentication を使用してユーザーのログインを許可する方法。
- Firebase Realtime Database を使用してデータを同期する方法
- Cloud Storage for Firebase にバイナリ ファイルを保存する方法。
- Firebase Local Emulator Suite を使用して Firebase で Android アプリを開発する方法
必要なもの
- 最新の Android Studio バージョン
- Android 5.0 以降を搭載した Android Emulator。
- Node.js バージョン 10 以降(Emulator Suite を使用する場合)。
- 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 で build-android-start
プロジェクトが開きます。google-services.json
ファイルがないという警告が表示されても問題ありません。これは後のステップで追加します。
依存関係を確認する
この Codelab では、必要な依存関係がすべてすでに追加されていますが、Firebase SDK をアプリに追加する方法を理解しておくことが重要です。
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 をインストールする
この Codelab では、Firebase Emulator Suite を使用して、Firebase Auth、Realtime Database、Cloud Storage をローカルでエミュレートします。これにより、アプリを構築するための安全で高速、かつコストのかからないローカル開発環境が提供されます。
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 Emulator Suite に接続する
エミュレータを起動する
ターミナルで、ローカルの 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 Emulator Suite UI を表示します。
この Codelab の残りの部分では、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)
}
5. スターター アプリを実行する
google-services.json を追加する
Android アプリを Firebase に接続するには、Android プロジェクトの app
フォルダ内に google-services.json
ファイルを追加する必要があります。この Codelab では、Firebase Emulator Suite に接続できるモックの JSON ファイルを用意しています。
mock-google-services.json
ファイルを google-services.json
として build-android-start/app
フォルダにコピーします。
cp mock-google-services.json build-android-start/app/google-services.json
この Codelab の最後のステップでは、実際の Firebase プロジェクトと Firebase Android アプリを作成し、このモック JSON ファイルを独自の構成に置き換える方法を学びます。
アプリを実行する
Android Studio にプロジェクトをインポートし、Firebase 構成 JSON ファイルを追加しました。これで、アプリを初めて実行する準備が整いました。
- Android Emulator を起動します。
- Android Studio で、ツールバーの実行アイコン()をクリックします。
Android Emulator でアプリが起動します。この時点では空のメッセージ リストが表示され、メッセージの送受信が機能しません。この Codelab の次のステップでは、ユーザーが Friendly Chat を使用できるようにユーザーを認証します。
6. 認証を有効にする
このアプリは、Firebase Realtime Database を使用してすべてのチャット メッセージを保存します。ただし、データを追加する前に、アプリが安全であり、認証されたユーザーのみがメッセージを投稿できることを確認する必要があります。このステップでは、Firebase Authentication を有効にして、Realtime Database セキュリティ ルールを構成します。
基本的なログイン機能を追加する
次に、基本的な Firebase Authentication のコードをいくつかアプリに追加し、ユーザーを検出してログイン画面を実装します。
現在のユーザーを確認する
まず、次のインスタンス変数を 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
}
}
次に、現在認証されている Firebase ユーザーに関する適切な情報を返すように、getUserPhotoUrl()
メソッドと getUserName()
メソッドを実装します。
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
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 Emulator でアプリを実行します。すぐにログイン画面が表示されます。[メールでログイン] ボタンをタップし、アカウントを作成します。すべてが正しく実装されていれば、メッセージ画面に移動します。
ログイン後、ブラウザで Firebase Emulator Suite UI を開き、[Authentication] タブをクリックして、最初にログインしたユーザー アカウントを確認します。
7. メッセージを読む
このステップでは、Realtime Database に保存されているメッセージを読み取って表示する機能を追加します。
サンプル メッセージをインポートする
- Firebase Emulator Suite UI で、[Realtime Database] タブを選択します。
- Codelab リポジトリのローカルコピーからデータビューアに
initial_messages.json
ファイルをドラッグ&ドロップします。
データベースの messages
ノードの下にいくつかのメッセージが表示されているはずです。
データを読み取る
メッセージを同期する
このセクションでは、新しく追加されたメッセージをアプリの UI に同期させるコードを次のように追加します。
- Firebase Realtime Database を初期化し、データの変更を処理するリスナーを追加する。
RecyclerView
アダプターを更新して、新しいメッセージが表示されるようにします。- Database インスタンス変数を他の Firebase インスタンス変数とともに
MainActivity
クラスに追加します。
MainActivity.kt
// Firebase instance variables
// ...
private lateinit var db: FirebaseDatabase
private lateinit var adapter: FriendlyMessageAdapter
コメント // Initialize Realtime Database and FirebaseRecyclerAdapter
の下にある MainActivity の onCreate()
メソッドを次のように変更します。このコードは、Realtime Database から既存のすべてのメッセージを追加し、Firebase Realtime Database の 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 Realtime Database からの更新のリッスンを開始および停止します。以下に示すように、MainActivity
の onPause()
メソッドと onResume()
メソッドを更新します。
MainActivity.kt
public override fun onPause() {
adapter.stopListening()
super.onPause()
}
public override fun onResume() {
super.onResume()
adapter.startListening()
}
メッセージの同期をテストする
- 実行アイコン()をクリックします。
- Emulator Suite UI で、[Realtime Database] タブに戻り、手動で新しいメッセージを追加します。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("")
}
画像メッセージ送信を実装する
このセクションでは、アプリユーザーが画像メッセージを送信できる機能を追加します。イメージ メッセージの作成手順は次のとおりです。
- 画像を選択
- 画像の選択を処理する
- Realtime Database に一時的な画像メッセージを書き込む
- 選択した画像のアップロードを開始
- アップロードが完了したら、画像メッセージの URL をアップロードした画像の URL に更新します。
画像を選択
この Codelab では、画像を追加するために Cloud Storage for Firebase を使用します。Cloud Storage は、アプリのバイナリデータを保存するのに適しています。
画像選択の処理と一時メッセージの書き込み
ユーザーが画像を選択すると、画像選択 Intent
が開始されます。これは、onCreate()
メソッドの最後にあるコードにすでに実装されています。終了すると、MainActivity
の onImageSelected()
メソッドを呼び出します。以下のコード スニペットを使用して、データベースへの一時的な画像 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
)
}
}
メッセージの送信をテストする
- Android Studio で [Run] ボタンをクリックします。
- Android Emulator でメッセージを入力し、送信ボタンをタップします。新しいメッセージがアプリの UI と Firebase Emulator Suite UI に表示されます。
- Android Emulator で [+] 画像をタップして、デバイスから画像を選択します。新しいメッセージは、最初にプレースホルダ画像とともに表示され、画像のアップロードが完了すると、選択した画像とともに表示されます。新しいメッセージは Emulator Suite UI にも表示されるはずです。具体的には、[Realtime Database] タブではオブジェクトとして、[ストレージ] タブでは blob として表示されます。
9. お疲れさまでした
これで、Firebase を使用してリアルタイム チャット アプリケーションを構築できました。
学習した内容
- Firebase Authentication
- Firebase Realtime Database
- Cloud Storage for Firebase
次に、この Codelab で学んだことを活かして、自分の Android アプリに Firebase を追加してみましょう。Firebase の詳細については、firebase.google.com をご覧ください。
実際の Firebase プロジェクトを設定し、(デモ プロジェクトやエミュレートされたリソースのみではなく)実際の Firebase リソースを使用する方法を確認する場合は、次のステップに進みます。
注: 実際の Firebase プロジェクトを設定した後、特に実際のアプリの構築を開始した後でも、開発とテストには Firebase Local Emulator Suite を使用することをおすすめします。
10. 省略可: Firebase プロジェクトを作成して設定する
このステップでは、実際の Firebase プロジェクトと、この Codelab で使用する Firebase Android アプリを作成します。また、アプリ固有の Firebase 構成をアプリに追加します。最後に、アプリで使用する実際の Firebase リソースを設定します。
Firebase プロジェクトを作成する
- ブラウザで Firebase コンソールに移動します。
- [プロジェクトを追加] を選択します。
- プロジェクト名を選択または入力します。任意の名前を使用できます。
- この Codelab では Google アナリティクスは必要ないため、プロジェクトでの有効化はスキップできます。
- [プロジェクトを作成] をクリックします。プロジェクトの準備ができたら、[続行] をクリックします。
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 プロジェクトに登録します。
- 新しいプロジェクトの概要画面で、Android アイコンをクリックして設定ワークフローを起動します。
- 次の画面で、アプリのパッケージ名として「
com.google.firebase.codelab.friendlychat
」と入力します。 - [アプリを登録] をクリックし、[google-services.json をダウンロード] をクリックして Firebase 構成ファイルをダウンロードします。
google-services.json
ファイルを Android プロジェクトのapp
ディレクトリにコピーします。- コンソールの設定ワークフローに示されている次の手順はスキップしてください(
build-android-start
プロジェクトですでに実行されています)。 - プロジェクトを Gradle ファイルと同期して、アプリですべての依存関係を利用できるようにします。Android Studio のツールバーで、[File] > [Sync Project with Gradle Files] を選択します。構成の変更を行うために、[Build/Clean Project] と [Build/Rebuild Project] の実行も必要になる場合があります。
Firebase Authentication を構成する
アプリがユーザーに代わって Firebase Authentication API にアクセスするには、Firebase Authentication と、アプリで使用するログイン プロバイダを有効にする必要があります。
- Firebase コンソールで、左側のナビゲーション パネルから [Authentication] を選択します。
- [ログイン方法] タブを選択します。
- [メール/パスワード] をクリックし、スイッチを有効(青色)に切り替えます。
- [Google] をクリックし、スイッチを有効(青色)に切り替えて、プロジェクトのサポートメールを設定します。
この Codelab の後半で「CONFIGURATION_NOT_FOUND」というメッセージでエラーが発生した場合は、このステップに戻って作業を再確認してください。
Realtime Database を構成する
この Codelab のアプリは、チャット メッセージを Firebase Realtime Database に保存します。このセクションでは、Firebase セキュリティ ルールという JSON 構成言語を使用してデータベースを作成し、そのセキュリティを構成します。
- Firebase コンソールで、左側のナビゲーション パネルから [Realtime Database] を選択します。
- [データベースを作成] をクリックして、新しい Realtime Database インスタンスを作成します。プロンプトが表示されたら、
us-central1
リージョンを選択し、[次へ] をクリックします。 - セキュリティ ルールに関するプロンプトが表示されたら、[ロックモード] を選択し、[有効にする] をクリックします。
- データベース インスタンスが作成されたら、[ルール] タブを選択し、次のようにルール構成を更新します。
{ "rules": { "messages": { ".read": "auth.uid != null", ".write": "auth.uid != null" } } }
セキュリティ ルールの仕組みの詳細(「auth」変数に関するドキュメントなど)については、Realtime Database のセキュリティに関するドキュメントをご覧ください。
Cloud Storage for Firebase を構成する
- Firebase コンソールで、左側のナビゲーション パネルから [Storage] を選択します。
- [開始] をクリックして、プロジェクトで Cloud Storage を有効にします。
- ダイアログの手順に沿って、推奨されるデフォルト値を使用してバケットを設定します。
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.DEBUG
が false
になるようにアプリをリリースモードで実行します。