1. Обзор
Изображение: Рабочее приложение «Дружественный чат».
Добро пожаловать в лабораторию разработки Friendly Chat. В этой лабораторной работе вы узнаете, как использовать платформу Firebase для создания приложения для чата на Android.
Что вы узнаете
- Как использовать аутентификацию Firebase, чтобы разрешить пользователям входить в систему.
- Как синхронизировать данные с помощью базы данных Firebase Realtime.
- Как хранить двоичные файлы в Cloud Storage для Firebase.
- Как использовать пакет локального эмулятора Firebase для разработки приложения Android с помощью Firebase.
Что вам понадобится
- Последняя версия Android Studio .
- Эмулятор Android с Android 5.0+.
- 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 выберите «Файл» > «Открыть» , затем выберите каталог build-android-start
( ) из каталога, в который вы загрузили пример кода.
Теперь у вас должен быть открыт проект build-android-start
в Android Studio. Если вы видите предупреждение об отсутствии файла google-services.json
, не волнуйтесь. Он будет добавлен на более позднем этапе.
Проверьте зависимости
В этой кодовой лаборатории все необходимые вам зависимости уже добавлены, но важно понимать, как добавить 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
}
приложение/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.
В этой лаборатории кода вы будете использовать пакет эмулятора Firebase для локальной эмуляции Firebase Auth, базы данных реального времени и облачного хранилища. Это обеспечивает безопасную, быструю и бесплатную локальную среду разработки для создания вашего приложения.
Установите интерфейс командной строки Firebase
Сначала вам нужно будет установить 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.
Перейдите по адресу http://localhost:4000 в веб-браузере, чтобы просмотреть пользовательский интерфейс Firebase Emulator Suite:
Оставьте команду 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, вам необходимо добавить файл google-services.json
в папку app
вашего проекта Android. Для целей этой лаборатории мы предоставили макет 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
На последнем этапе этой лабораторной работы вы узнаете, как создать настоящий проект Firebase и приложение Firebase для Android, чтобы можно было заменить этот фиктивный файл JSON своей собственной конфигурацией.
Запустите приложение
Теперь, когда вы импортировали проект в Android Studio и добавили JSON-файл конфигурации Firebase, вы готовы впервые запустить приложение.
- Запустите эмулятор Android.
- В Android Studio нажмите «Выполнить » ( ) на панели инструментов.
Приложение должно запуститься на вашем эмуляторе Android. На этом этапе вы должны увидеть пустой список сообщений, а отправка и получение сообщений работать не будут. На следующем этапе этой лабораторной работы вы будете аутентифицировать пользователей, чтобы они могли использовать дружеский чат.
6. Включите аутентификацию
Это приложение будет использовать базу данных Firebase Realtime для хранения всех сообщений чата. Однако прежде чем добавлять данные, мы должны убедиться, что приложение безопасно и что только прошедшие проверку подлинности пользователи могут публиковать сообщения. На этом этапе мы включим аутентификацию 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 для реализации логики входа в систему.
Добавьте переменную экземпляра Auth в класс 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 Emulator Suite в своем браузере, затем перейдите на вкладку «Аутентификация» , чтобы увидеть первую вошедшую в систему учетную запись пользователя.
7. Читать сообщения
На этом этапе мы добавим функциональность для чтения и отображения сообщений, хранящихся в базе данных реального времени.
Импортировать примеры сообщений
- В пользовательском интерфейсе Firebase Emulator Suite выберите вкладку «База данных реального времени» .
- Перетащите файл
initial_messages.json
из локальной копии репозитория Codelab в средство просмотра данных.
Теперь у вас должно быть несколько сообщений в узле messages
базы данных.
Чтение данных
Синхронизировать сообщения
В этом разделе мы добавляем код, который синхронизирует вновь добавленные сообщения с пользовательским интерфейсом приложения:
- Инициализация базы данных Firebase Realtime и добавление прослушивателя для обработки изменений, внесенных в данные.
- Обновление адаптера
RecyclerView
для отображения новых сообщений. - Добавление переменных экземпляра базы данных с другими переменными экземпляра Firebase в классе
MainActivity
:
MainActivity.kt
// Firebase instance variables
// ...
private lateinit var db: FirebaseDatabase
private lateinit var adapter: FriendlyMessageAdapter
Измените метод onCreate()
вашего MainActivity под комментарием // Initialize Realtime Database and FirebaseRecyclerAdapter
с помощью кода, определенного ниже. Этот код добавляет все существующие сообщения из базы данных реального времени, а затем прослушивает новые дочерние записи по пути messages
в вашей базе данных Firebase Realtime. Он добавляет новый элемент в пользовательский интерфейс для каждого сообщения:
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 Realtime. Обновите методы onPause()
и onResume()
в MainActivity
как показано ниже:
MainActivity.kt
public override fun onPause() {
adapter.stopListening()
super.onPause()
}
public override fun onResume() {
super.onResume()
adapter.startListening()
}
Проверка синхронизации сообщений
- Нажмите «Выполнить » ( ).
- В пользовательском интерфейсе Emulator Suite вернитесь на вкладку «База данных реального времени» , а затем вручную добавьте новое сообщение. Убедитесь, что сообщение отображается в вашем приложении Android:
Поздравляем, вы только что добавили в свое приложение базу данных реального времени!
8. Отправляйте сообщения
Осуществить отправку текстовых сообщений
В этом разделе вы добавите пользователям приложения возможность отправлять текстовые сообщения. Приведенный ниже фрагмент кода прослушивает события нажатия кнопки отправки, создает новый объект FriendlyMessage
с содержимым поля сообщения и отправляет сообщение в базу данных. Метод push()
добавляет автоматически сгенерированный идентификатор к пути отправляемого объекта. Эти идентификаторы являются последовательными, что гарантирует добавление новых сообщений в конец списка.
Обновите прослушиватель кликов кнопки отправки в методе 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 for Firebase. Облачное хранилище — хорошее место для хранения двоичных данных вашего приложения.
Обработка выбора изображения и запись временного сообщения
Как только пользователь выбрал изображение, запускается Intent
выбора изображения. Это уже реализовано в коде в конце метода onCreate()
. По завершении он вызывает метод onImageSelected()
MainActivity
. Используя приведенный ниже фрагмент кода, вы напишете в базу данных сообщение с 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 введите сообщение, затем нажмите кнопку «Отправить». Новое сообщение должно быть видно в пользовательском интерфейсе приложения и в пользовательском интерфейсе Firebase Emulator Suite.
- В эмуляторе Android коснитесь изображения «+», чтобы выбрать изображение с вашего устройства. Новое сообщение должно быть видно сначала с изображением-заполнителем, а затем с выбранным изображением после завершения загрузки изображения. Новое сообщение также должно быть видно в пользовательском интерфейсе Emulator Suite, в частности, как объект на вкладке «База данных реального времени» и как объект на вкладке «Хранилище».
9. Поздравляем!
Вы только что создали приложение для чата в реальном времени с помощью Firebase!
Что вы узнали
- Аутентификация Firebase
- База данных Firebase в реальном времени
- Облачное хранилище для Firebase
Затем попробуйте использовать то, что вы узнали в этой лаборатории кода, чтобы добавить Firebase в свое собственное приложение для Android! Чтобы узнать больше о Firebase, посетите firebase.google.com .
Если вы хотите узнать, как настроить настоящий проект Firebase и использовать реальные ресурсы Firebase (вместо демонстрационного проекта и только эмулированных ресурсов), перейдите к следующему шагу.
Примечание. Даже после того, как вы настроили настоящий проект Firebase и особенно когда вы начали создавать настоящее приложение, мы рекомендуем использовать пакет локального эмулятора Firebase для разработки и тестирования.
10. Необязательно: создайте и настройте проект Firebase.
На этом этапе вы создадите настоящий проект Firebase и приложение Firebase для Android, которое будет использоваться с этой лабораторией кода. Вы также добавите в свое приложение конфигурацию Firebase для конкретного приложения. И, наконец, вы настроите настоящие ресурсы Firebase для использования в своем приложении.
Создать проект Firebase
- В браузере перейдите в консоль Firebase .
- Выберите Добавить проект .
- Выберите или введите имя проекта. Вы можете использовать любое имя, какое захотите.
- Для этой лаборатории кода вам не нужна Google Analytics, поэтому вы можете не включать ее для своего проекта.
- Нажмите Создать проект . Когда ваш проект будет готов, нажмите «Продолжить» .
Обновите тарифный план Firebase
Чтобы использовать Cloud Storage for Firebase, ваш проект Firebase должен находиться на тарифном плане с оплатой по мере использования (Blaze) , что означает, что он связан с платежным аккаунтом Cloud .
- Для учетной записи Cloud Billing требуется способ оплаты, например кредитная карта.
- Если вы новичок в Firebase и Google Cloud, проверьте, имеете ли вы право на получение кредита в размере 300 долларов США и бесплатную пробную платежную учетную запись Cloud .
- Если вы выполняете эту лабораторную работу в рамках мероприятия, спросите у организатора, есть ли у него какие-либо облачные кредиты.
Чтобы обновить проект до плана Blaze, выполните следующие действия:
- В консоли Firebase выберите обновление плана .
- Выберите план Blaze. Следуйте инструкциям на экране, чтобы связать учетную запись Cloud Billing с вашим проектом.
Если вам нужно было создать учетную запись Cloud Billing в рамках этого обновления, вам может потребоваться вернуться к процессу обновления в консоли Firebase, чтобы завершить обновление.
Добавьте 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:
- На обзорном экране вашего нового проекта щелкните значок Android, чтобы запустить рабочий процесс установки:
- На следующем экране введите
com.google.firebase.codelab.friendlychat
в качестве имени пакета для вашего приложения. - Нажмите «Зарегистрировать приложение» , затем нажмите « Загрузить google-services.json» , чтобы загрузить файл конфигурации Firebase.
- Скопируйте файл
google-services.json
в каталогapp
вашего проекта Android. - Пропустите следующие шаги, показанные в рабочем процессе настройки консоли (они уже были выполнены за вас в проекте
build-android-start
). - Убедитесь, что все зависимости доступны для вашего приложения, синхронизировав проект с файлами Gradle. На панели инструментов Android Studio выберите «Файл» > «Синхронизировать проект с файлами Gradle» . Вам также может потребоваться запустить проект сборки/очистки и проект сборки/перестройки, чтобы изменения конфигурации вступили в силу.
Настройка аутентификации Firebase
Прежде чем ваше приложение сможет получить доступ к API аутентификации Firebase от имени ваших пользователей, вам необходимо включить аутентификацию Firebase и поставщиков входа в систему, которых вы хотите использовать в своем приложении.
- В консоли Firebase выберите «Аутентификация» на левой навигационной панели.
- Выберите вкладку «Метод входа» .
- Нажмите «Электронная почта/пароль» и переведите переключатель в положение «включено» (синий).
- Нажмите Google , затем переведите переключатель в положение «включено» (синий) и настройте адрес электронной почты поддержки проекта.
Если позже в этой лаборатории кода вы получите ошибки с сообщением «CONFIGURATION_NOT_FOUND», вернитесь к этому шагу и еще раз проверьте свою работу.
Настройка базы данных реального времени
Приложение в этой лаборатории кода хранит сообщения чата в базе данных Firebase Realtime. В этом разделе мы создадим базу данных и настроим ее безопасность с помощью языка конфигурации JSON, который называется Правила безопасности Firebase.
- На левой панели консоли Firebase разверните «Сборка» и выберите «База данных реального времени» .
- Нажмите Создать базу данных .
- Выберите местоположение для вашей базы данных, затем нажмите «Далее» .
Для реального приложения вам нужно выбрать местоположение, близкое к вашим пользователям. - Нажмите «Запустить в тестовом режиме» . Прочтите отказ от ответственности о правилах безопасности.
На следующих шагах этой лаборатории вы добавите правила безопасности для защиты ваших данных. Не распространяйте и не публикуйте приложение без добавления правил безопасности для вашей базы данных. - Нажмите Создать .
- После создания экземпляра базы данных выберите вкладку «Правила» , затем обновите конфигурацию правил, указав следующее:
{ "rules": { "messages": { ".read": "auth.uid != null", ".write": "auth.uid != null" } } }
Дополнительную информацию о том, как работают правила безопасности (включая документацию по переменной «auth»), см. в документации по безопасности базы данных реального времени .
Настройте облачное хранилище для Firebase
- На левой панели консоли Firebase разверните «Сборка» и выберите «Хранилище» .
- Нажмите «Начать» .
- Выберите расположение для сегмента хранилища по умолчанию.
Сегменты вUS-WEST1
,US-CENTRAL1
иUS-EAST1
могут использовать преимущества уровня «Всегда бесплатно» для Google Cloud Storage. Во всех остальных местах сегменты соответствуют ценам и использованию Google Cloud Storage . - Нажмите «Запустить в тестовом режиме» . Прочтите отказ от ответственности о правилах безопасности.
Позже в этой лабораторной работе вы добавите правила безопасности для защиты ваших данных. Не распространяйте и не публикуйте приложение без добавления правил безопасности для сегмента хранилища. - Нажмите Создать .
Подключитесь к ресурсам Firebase
На предыдущем этапе этой лаборатории кода вы добавили следующее в MainActivity.kt
. Этот условный блок соединил ваш проект Android с пакетом эмуляторов Firebase.
// 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
.