Этот урок посвящен созданию функционального чата в Android-приложении с использованием базы данных Firebase. Рассмотрим подключение библиотек, авторизацию пользователей и отображение сообщений.
Исправление ошибок из предыдущего урока
Перед началом работы необходимо исправить ошибку в наименовании изображения кнопки (было «acids and батон», должно быть «ic_send_button»). Для исправления:
- Найдите файл изображения (res/drawable/…).
- Переименуйте файл в ic_send_button (все буквы в нижнем регистре). Используйте функцию переименования IDE с обновлением ссылок.
- Выполните Build -> Make Project.
Авторизация пользователя и подключение библиотек
В MainActivity.java необходимо проверить авторизацию пользователя в Firebase. Подключите необходимые библиотеки:
- Откройте build.gradle (Module: app).
- В секции dependencies добавьте:
implementation platform('com.google.firebase:firebase-bom:32.2.3')
implementation 'com.google.firebase:firebase-auth-ktx'
implementation 'com.google.firebase:firebase-database-ktx'
- Синхронизируйте проект.
Проверку авторизации выполните так:
FirebaseAuth.getInstance().getCurrentUser();
getCurrentUser() вернет null, если пользователь не авторизован.
Авторизация через FirebaseUI
Для авторизации неавторизованного пользователя используйте FirebaseAuthUI:
- В build.gradle (Module: app) добавьте:
implementation 'com.firebaseui:firebase-ui-auth:8.0.2'
- Синхронизируйте проект.
- В MainActivity.java используйте:
startActivityForResult(AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(), SIGN_IN_CODE);
где providers — список провайдеров авторизации, а SIGN_IN_CODE — уникальный код запроса. Это запустит экран авторизации FirebaseUI. Результат обработается в onActivityResult().
Обработка результата авторизации и отображение сообщений
Метод onActivityResult() обрабатывает результат авторизации:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SIGN_IN_CODE) {
if (resultCode == RESULT_OK) {
displayAllMessages();
Snackbar.make(findViewById(R.id.activity_main), "Вы авторизованы", Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(findViewById(R.id.activity_main), "Вы не авторизованы", Snackbar.LENGTH_LONG).show();
finish();
}
}
}
Функция displayAllMessages() (реализация не приведена) отображает сообщения из Firebase, используя FirebaseListAdapter, ListView и layout элемента списка (list_item.xml с тремя TextView для имени пользователя, времени и текста сообщения).
Отправка сообщений
Обработчик события кнопки отправки:
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String messageText = messageField.getText().toString();
if (!messageText.isEmpty()) {
DatabaseReference messagesRef = FirebaseDatabase.getInstance().getReference().child("messages");
Message message = new Message(FirebaseAuth.getInstance().getCurrentUser().getEmail(), messageText);
messagesRef.push().setValue(message);
messageField.setText("");
}
}
});
Этот код получает текст, создает объект Message, добавляет его в Firebase и очищает текстовое поле.
Настройка правил безопасности Firebase
В консоли Firebase, в разделе «Database» > «Rules», настройте правила:
{
"rules": {
".read": true,
".write": true
}
}
Это разрешит чтение и запись данных.
В этом уроке создан простой чат с Firebase. Рассмотрены подключение библиотек, авторизация, отображение и отправка сообщений. В следующих уроках улучшим дизайн и добавим функции.