Firebase Android Codelab - Создайте дружественный чат

1. Обзор

Скриншот

Изображение: рабочее приложение Friendly Chat.

Добро пожаловать в лабораторию «Дружественный чат». В этой лаборатории вы узнаете, как использовать платформу Firebase для создания приложения чата на Android.

Что ты узнаешь

  • Как использовать Firebase Authentication, чтобы пользователи могли входить в систему.
  • Как синхронизировать данные с помощью базы данных Firebase Realtime.
  • Как хранить двоичные файлы в Cloud Storage для Firebase.
  • Как использовать Firebase Local Emulator Suite для разработки Android-приложения с Firebase.

Что тебе понадобится

  • Android - студия версии 4.2+.
  • Android Emulator с Android 5.0+.
  • Java 7 или выше. Для того, чтобы установить Java использовать эти инструкции ; чтобы проверить вашу версию, запустить java -version .
  • Знакомство с языком программирования Kotlin.

2. Получите образец кода.

Клонировать репозиторий

Клонируйте репозиторий GitHub из командной строки:

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

Импортировать в Android Studio

В Android Studio выберите Файл> Открыть, а затем выберите build-android-start каталог ( android_studio_folder ) из каталога, в который вы скачали образец кода.

Теперь вы должны иметь build-android-start проекта открыть в Android Studio. Если вы видите предупреждение о google-services.json файл отсутствует, не беспокойтесь. Он будет добавлен позже.

Проверить зависимости

В этой кодовой таблице все необходимые вам зависимости уже добавлены, но важно понимать, как добавить Firebase SDK в ваше приложение:

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

приложение / 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. Установите Firebase CLI.

Для того , чтобы запустить Firebase Emulator Suite , необходимо установить и использовать Firebase CLI .

Установите CLI

Вариант 1 - установить с помощью npm

Если на вашем компьютере уже установлены Node.js и npm, вы можете установить интерфейс командной строки с помощью следующей команды:

npm install -g firebase-tools@latest

Вариант 2 - установить автономный двоичный файл

Если у вас нет Node.js / НМП или вы новичок в разработке приложений, вы можете установить CLI в качестве автономного двоичном ниже в инструкции для вашей платформы здесь .

Проверить установку

После того, как у вас установлен Firebase CLI, выполните следующую команду , чтобы убедиться , что у вас есть версии 9.11.0 или выше:

firebase --version

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: // локальный: 4000 в вашем веб - браузере , чтобы просмотреть Firebase Emulator Сюита UI:

Emulator Suite UI главная

Оставьте emulators:start команды работает для остальной части codelab.

Подключите ваше приложение

В 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 Emulator Suite.

Скопируйте 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 и добавили файл конфигурации Firebase JSON, вы готовы запустить приложение в первый раз.

  1. Запустите свой эмулятор Android.
  2. В 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 Сюита UI в вашем браузере, а затем перейдите на вкладку Authentication , чтобы увидеть это первая зарегистрированны учетной записи пользователя.

7. Прочтите сообщения.

На этом этапе мы добавим функциональность для чтения и отображения сообщений, хранящихся в базе данных реального времени.

Импортировать образцы сообщений

  1. В Firebase Emulator сюита UI, выберите вкладку База данных в реальном времени.
  2. Перетащите 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

Изменение вашего MainActivity в onCreate() метод под комментарием // Initialize Realtime Database and FirebaseRecyclerAdapter в // Initialize Realtime Database and FirebaseRecyclerAdapter с кодом , определенным ниже. Этот код добавляет все существующие сообщения из базы данных в реальном времени , а затем прослушивает новые записи детей в рамках messages пути в вашей базе данных Firebase в реальном времени. Он добавляет новый элемент в пользовательский интерфейс для каждого сообщения:

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. Нажмите кнопку Run ( выполнять ).
  2. В эмуляторе Suite , UI, вернитесь на вкладку Database в реальном времени, а затем вручную добавить новое сообщение. Убедитесь, что сообщение отображается в вашем приложении для 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-адрес загруженного изображения после завершения загрузки

Выбрать изображение

Для добавления изображений эта кодовая лаборатория использует облачное хранилище для Firebase. Облачное хранилище - хорошее место для хранения двоичных данных вашего приложения.

Обработка выбора изображения и написание временного сообщения

После того , как пользователь выбрал изображение, выбор изображения Intent запускается. Это уже реализовано в коде в конце onCreate() метода. По окончании он вызывает MainActivity «s 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
            )
        }
}

Тестовая отправка сообщений

  1. В Android Studio щелкните значок выполнять Выполнить кнопку.
  2. В эмуляторе Android введите сообщение, затем нажмите кнопку отправки. Новое сообщение должно быть видно в пользовательском интерфейсе приложения и в пользовательском интерфейсе Firebase Emulator Suite.
  3. В эмуляторе Android коснитесь изображения «+», чтобы выбрать изображение с вашего устройства. Новое сообщение должно отображаться сначала с изображением-заполнителем, а затем с выбранным изображением после завершения загрузки изображения. Новое сообщение также должно быть видно в пользовательском интерфейсе Emulator Suite, в частности, как объект на вкладке Realtime Database и как большой двоичный объект на вкладке Storage.

9. Поздравляем!

Вы только что создали приложение для чата в реальном времени с помощью Firebase!

Что вы узнали

  • Проверка подлинности Firebase
  • База данных Firebase в реальном времени
  • Облачное хранилище для Firebase

Затем попробуйте использовать то, что вы узнали в этой кодовой лаборатории, чтобы добавить Firebase в свое собственное приложение для Android! Чтобы узнать больше о Firebase, посетите firebase.google.com .

Если вы хотите узнать , как создать реальный проект Firebase и использовать реальные Firebase ресурсов (вместо демонстрационного проекта и только эмулировать ресурсы), переходите к следующему шагу.

Примечание: Даже после того, как вы создали настоящий Firebase проект и особенно , когда вы начали строить реальное приложение, мы рекомендуем использовать Firebase Local Emulator Сюита для разработки и тестирования.

10. Необязательно: создайте и настройте проект Firebase.

На этом этапе вы создадите настоящий проект Firebase и приложение Firebase для Android для использования с этой кодовой таблицей. Вы также добавите в свое приложение конфигурацию Firebase для конкретного приложения. И, наконец, вы настроите реальные ресурсы Firebase для использования в своем приложении.

Создать проект Firebase

  1. В вашем браузере, перейдите в консоль Firebase .
  2. Выберите Добавить проект.
  3. Выберите или введите название проекта. Вы можете использовать любое имя, какое захотите.
  4. Вам не нужен Google Analytics для этой кодовой таблицы, поэтому вы можете не включать его для своего проекта.
  5. Нажмите Создать проект. Когда проект будет готов, нажмите кнопку Продолжить.

Добавьте 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:

  1. На обзорном экране вашего нового проекта щелкните значок Android, чтобы запустить рабочий процесс настройки: добавить приложение для Android
  2. На следующем экране введите com.google.firebase.codelab.friendlychat в качестве имени пакета для вашего приложения.
  3. Нажмите Регистрацию App, затем нажмите Загрузить Google-services.json для загрузки Firebase файла конфигурации.
  4. Скопируйте google-services.json файл в app директорию вашего Android проекта.
  5. Пропустите следующие шаги , показанные в рабочем процессе настройки консоли (они уже сделали для вас в build-android-start проекта).
  6. Убедитесь, что все зависимости доступны вашему приложению, синхронизируя проект с файлами Gradle. На панели инструментов Android Studio, выберите Файл> Синхронизация проекта с Gradle файлов.

Настроить аутентификацию Firebase

Прежде чем ваше приложение сможет получить доступ к API аутентификации Firebase от имени ваших пользователей, вам необходимо включить аутентификацию Firebase и поставщиков услуг входа, которые вы хотите использовать в своем приложении.

  1. В Firebase консоли выберите Проверка подлинности с левой стороны панели навигации.
  2. Выберите Вход в систему вкладке метода.
  3. Нажмите E - mail / пароль, затем переключить переключатель к включенным (синий).
  4. Нажмите Google, а затем переключить переключатель к включен (синий) и установить поддержку проекта по электронной почте.

Если вы получите ошибки позже в этой кодовой таблице с сообщением «CONFIGURATION_NOT_FOUND», вернитесь к этому шагу и дважды проверьте свою работу.

Настроить базу данных в реальном времени

Приложение в этой кодовой лаборатории хранит сообщения чата в базе данных Firebase Realtime. В этом разделе мы создадим базу данных и настроим ее безопасность с помощью языка конфигурации JSON, который называется Firebase Security Rules.

  1. В Firebase консоли выберите в реальном времени базы данных с левой стороны панели навигации.
  2. Нажмите кнопку Создать базу данных для создания новой базы данных в реальном времени экземпляра. При появлении запроса выберите us-central1 область, а затем нажмите кнопку Далее.
  3. При появлении запроса о правилах безопасности, выберите заблокированный режим, затем нажмите кнопку Включить.
  4. После того , как экземпляр базы данных был создан, выберите вкладку Правила, а затем обновить конфигурацию правил со следующим:
     {
       "rules": {
         "messages": {
           ".read": "auth.uid != null",
           ".write": "auth.uid != null"
         }
       }
     }
    

Для получения более подробной информации о том , как правила безопасности работы ( в том числе документацию по переменной «Идент»), см документацию по безопасности баз данных в реальном времени .

Настроить облачное хранилище для Firebase

  1. В Firebase консоли , выберите пункт меню с левой стороны панели навигации.
  2. Нажмите Начать , чтобы включить Cloud Storage для вашего проекта.
  3. Следуйте инструкциям в диалоговом окне, чтобы настроить ведро с использованием предлагаемых значений по умолчанию.

Подключитесь к ресурсам 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 .