1。概要
画像:働きやすいチャットアプリ。
フレンドリーチャットコードラボへようこそ。このコードラボでは、Firebaseプラットフォームを使用してAndroidでチャットアプリを作成する方法を学習します。
あなたが学ぶこと
- FirebaseAuthenticationを使用してユーザーがログインできるようにする方法。
- Firebase RealtimeDatabaseを使用してデータを同期する方法。
- Cloud Storage forFirebaseにバイナリファイルを保存する方法。
- Firebase Local EmulatorSuiteを使用してFirebaseでAndroidアプリを開発する方法。
必要なもの
- AndroidStudioバージョン4.2以降。
- Android5.0以降を搭載したAndroidエミュレーター。
- Java7以降。 Javaをインストールするには、次の手順を使用します;バージョンを確認するには、
java -version
versionを実行します。 - Kotlinプログラミング言語に精通していること。
2.サンプルコードを取得します
リポジトリのクローンを作成する
コマンドラインからGitHubリポジトリのクローンを作成します。
$ git clone https://github.com/firebase/codelab-friendlychat-android
AndroidStudioにインポートする
Android Studioで、[ファイル] > [開く]を選択し、 build-android-start
ディレクトリを選択します( )サンプルコードをダウンロードしたディレクトリから。
これで、 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'
}
3. FirebaseCLIをインストールします
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
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 Emulator SuiteUIを表示します。
残りのコードラボでは、 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
ファイルを追加する必要があります。このコードラボの目的のために、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ファイルを追加したので、アプリを初めて実行する準備が整いました。
- Androidエミュレータを起動します。
- Android Studioで、[実行]をクリックします(
)ツールバーで。
アプリはAndroidエミュレーターで起動するはずです。この時点で、空のメッセージリストが表示され、メッセージの送受信は機能しません。このコードラボの次のステップでは、ユーザーがフレンドリーチャットを使用できるようにユーザーを認証します。
6.認証を有効にする
このアプリは、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()
中にユーザーがサインインしているかどうかも確認します。
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.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を開き、[認証]タブをクリックして、この最初にサインインしたユーザーアカウントを表示します。
7.メッセージを読む
このステップでは、RealtimeDatabaseに保存されているメッセージを読み取って表示する機能を追加します。
サンプルメッセージをインポートする
- Firebase Emulator Suite UIで、[リアルタイムデータベース]タブを選択します。
-
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
します。このコードは、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からの更新のリッスンを開始および停止します。以下に示すように、 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("")
}
画像メッセージ送信を実装する
このセクションでは、アプリユーザーが画像メッセージを送信する機能を追加します。画像メッセージの作成は、次の手順で実行されます。
- 画像を選択
- 画像選択を処理する
- 一時的な画像メッセージをリアルタイムデータベースに書き込みます
- 選択した画像のアップロードを開始します
- アップロードが完了したら、画像メッセージのURLをアップロードされた画像のURLに更新します
画像を選択
画像を追加するために、このコードラボはCloud Storage forFirebaseを使用しています。 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で、
実行ボタン。
- Androidエミュレーターでメッセージを入力し、送信ボタンをタップします。新しいメッセージは、アプリUIとFirebase Emulator SuiteUIに表示されます。
- Androidエミュレーターで、「+」画像をタップして、デバイスから画像を選択します。新しいメッセージは、最初にプレースホルダー画像で表示され、画像のアップロードが完了すると、選択した画像で表示されます。新しいメッセージは、Emulator Suite UIにも表示されます。具体的には、[Realtime Database]タブのオブジェクトとして、[Storage]タブのblobとして表示されます。
9.おめでとうございます!
Firebaseを使用してリアルタイムチャットアプリケーションを作成しました。
あなたが学んだこと
- Firebase認証
- Firebaseリアルタイムデータベース
- Firebase用のクラウドストレージ
次に、このコードラボで学んだことを使用して、Firebaseを独自のAndroidアプリに追加してみてください。 Firebaseの詳細については、 firebase.google.comにアクセスしてください。
実際のFirebaseプロジェクトを設定し、(デモプロジェクトとエミュレートされたリソースのみではなく)実際のFirebaseリソースを使用する方法を学びたい場合は、次の手順に進みます。
注:実際のFirebaseプロジェクトを設定した後でも、特に実際のアプリの作成を開始した場合でも、開発とテストにはFirebase Local EmulatorSuiteを使用することをおすすめします。
10.オプション:Firebaseプロジェクトを作成して設定します
このステップでは、このコードラボで使用する実際のFirebaseプロジェクトとFirebaseAndroidアプリを作成します。また、アプリ固有のFirebase構成をアプリに追加します。最後に、アプリで使用する実際のFirebaseリソースを設定します。
Firebaseプロジェクトを作成する
- ブラウザで、 Firebaseコンソールに移動します。
- [プロジェクトの追加]を選択します。
- プロジェクト名を選択または入力します。任意の名前を使用できます。
- このコードラボにはGoogleAnalyticsは必要ないため、プロジェクトでの有効化をスキップできます。
- [プロジェクトの作成]をクリックします。プロジェクトの準備ができたら、[続行]をクリックします。
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ツールバーから、[ファイル] > [プロジェクトをGradleファイルと同期]を選択します。構成の変更を行うには、Build / CleanProjectとBuild / RebuildProjectを実行する必要がある場合もあります。
Firebase認証を設定する
アプリがユーザーに代わってFirebaseAuthentication APIにアクセスする前に、FirebaseAuthenticationとアプリで使用するログインプロバイダーを有効にする必要があります。
- Firebaseコンソールで、左側のナビゲーションパネルから[認証]を選択します。
- [サインイン方法]タブを選択します。
- [電子メール/パスワード]をクリックしてから、スイッチを有効(青)に切り替えます。
- [ Google ]をクリックし、スイッチを有効(青)に切り替えて、プロジェクトサポートメールを設定します。
このコードラボの後半で「CONFIGURATION_NOT_FOUND」というメッセージが表示されたエラーが発生した場合は、この手順に戻って作業を再確認してください。
リアルタイムデータベースの構成
このコードラボのアプリは、チャットメッセージをFirebase RealtimeDatabaseに保存します。このセクションでは、データベースを作成し、Firebaseセキュリティルールと呼ばれるJSON構成言語を使用してそのセキュリティを構成します。
- Firebaseコンソールで、左側のナビゲーションパネルから[ RealtimeDatabase ]を選択します。
- [データベースの作成]をクリックして、新しいRealtimeDatabaseインスタンスを作成します。プロンプトが表示されたら、
us-central1
リージョンを選択し、[次へ]をクリックします。 - セキュリティルールについてプロンプトが表示されたら、ロックモードを選択し、[有効にする]をクリックします。
- データベースインスタンスが作成されたら、[ルール]タブを選択し、次のようにルール構成を更新します
{ "rules": { "messages": { ".read": "auth.uid != null", ".write": "auth.uid != null" } } }
セキュリティルールの動作の詳細(「auth」変数に関するドキュメントを含む)については、 RealtimeDatabaseのセキュリティドキュメントを参照してください。
Firebase用にCloudStorageを構成する
- Firebaseコンソールで、左側のナビゲーションパネルから[ストレージ]を選択します。
- [開始]をクリックして、プロジェクトでCloudStorageを有効にします。
- ダイアログの手順に従って、推奨されるデフォルトを使用してバケットを設定します。
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
になるようにします。