Firebase Tutorial — Firebase database. Part I.
Постановка задачи: Познакомиться с Firebase. Зарегистрировать приложение на console.firebase.google.com. Познакомиться с NoSQL базой данных Firebase.
О Firebase (обзор):
- https://www.youtube.com/watch?v=0mRmHqz0-W8
- https://www.youtube.com/watch?v=CDXUczHzZn8
- https://www.youtube.com/watch?v=4kcN65wICVs
- https://www.youtube.com/watch?v=KGsPL7o2R7E — краткий обзор
Подключение к Firebase
Подключится можно двумя способами: автоматически и вручную. Подключимся автоматически. В Android Studio выбираем Tools — Firebase. Открывается Firebase Assistant. Нам нужно Realtime Database.

Сначала Assiatant предложит подключить приложение к Firebase. Нажимаем. Следуем инструкциям (необходим аккаутн Google). Подключили. Затем добавляем Realtime Database в наше приложение. Если все ок, в Assistant мы получим надпись зеленым шрифтом: “Dependencies set up correctly”.

В консоли Firebase теперь можно увидеть наш проект:

Если что-то пошло не так, можно подключить проект вручную. Наглядный пример см. здесь
Теперь добавим простое меню, по которому мы будем добавлять записи, сохранять изменения редактируемых записей и удалять записи в базе данных. Итак, добавим три иконки (ic_new, ic_remove, ic_save), например такие:
и добавим соответствующий им файл меню в наш проект. Для этого в res добавляем папку menu и там создаем файл “menu_main.xml”:
Теперь добавим Toolbar. В файле res — values — styles.xml параметр parent у “AppTheme” меняем на parent=”Theme.AppCompat.Light.NoActionBar”
В “activity_main.xml” добавляем описание макета Toolbar:
И, наконец, регистрируем Toolbar в MainActivity:
Инициализируем созданное нами меню. Для этого переопределяем в MainActivity onCreateOptionsMenu(…):
Создадим модель данных, которые мы будем хранить в Firebase. Пусть это будет список контактов у которых есть поле name и поле email.
В MainActivity будем отображать список контактов в виде ListView. Добавим макет элемента списка. В layout создаем “listview_item.xml”:
Добавим формы для ввода в макет главного окна, в “activity_main.xml” добавляем:
При этом надо учесть, что т.к. мы используем TextInputLayout у нас должна быть в build.gradle (Module:app) подключена библотека design, например ‘com.android.support:design:26.1.0’
Добавим в “activity_main.xml” ListView в котором будет отображаться список контактов:
Добавим также ProgressBar в “activity_main.xml”, который будет показывать что данные загружаются с Firebase:
В Preview получим примерно такое:

Таким образом, макет отображения данных у нас есть. Теперь возмемся за начинку.
Создаем модель данных:
Пишем адаптер для ListView:
И инициализируем все View, используемые нами, в MainActivity:
Наконец, перейдем к Firebase. Инициализируем Firebase и получим ссылку на базу данных. Для этого добавляем в onCreate(…) функцию initFirebase():
Теперь в onCreate(…) добавляем функцию addEventFirebaseListener() в которой создадим слушатель, который будет обнавлять записи в ListView, когда в базе данных Firebase происходят изменения:
Тут необходимо понять, что из себя представляет класс DataSnapshot. Экземпляр этого класса содержит данные из Firebase database. Т.е. всякий раз когда мы читаем данные из базы данных Firebase, мы получаем их в виде DataSnapshot. Это своеобразные “снимки” состояния базы данных, через которые мы можем получить данные из базы, но не можем как-то воздействовать на эти данные. Более подробную информацию см. в документации.
Теперь в консоли Firebase в разделе Database изменим правила, чтобы данные читались и писались из нашего приложения в базу данных Firebase без прохождения процедуры авторизации (в учебных целях). Для этого для чтения и записи выставляем “true”. Публикуем правила.

Наконец описываем что-же произойдет когда мы нажимаем на кнопки ранее созданного меню (напомним: “создать запись”, “сохранить изменения в записи”, “удалить запись”).
Переопределяем функцию onOptionsItemSelected(MenuItem item), которая ловит нажатия на кнопки меню:
Теперь нам надо написать тело функций createUser(), updateUser(selectedUser) и deleteUser(selectedUser), но для начала переопределим слушатель нажатия на элемент списка ListView, чтобы определять выбранную запись = selectedUser. Создаем глобальную переменную selectedUser и пишем тело слушателя нажатия на элемент ListView в onCreate(…):
Если все сделали правильно, длжно работать. Мы можем добавлять данные в базуданных Firebase, редактировать и удалять их. В консоли Firebase изменение данных можно наблюдать “в прямом эфире”:

В консоле Firebase:

Например, когда мы удаляем данные, в консоли они окрашиваются в красный цвет:
Начинаем работать с Firebase на Android

Ashraff Hathibelagal Sep 30, 2016
Для мобильных приложений необходим сервер для выполнения таких задач, как проверка подлинности пользователей и синхронизация пользовательских данных на нескольких устройствах. Однако для создания такого сервера требуется набор навыков, которого не хватает большинству независимых разработчиков приложений. К счастью, есть несколько back-end как сервисных платформ, которые часто называют BaaS, которые вы можете использовать сегодня. Firebase от Google — одна из таких платформ.
Firebase бесплатно предоставляет такие важные услуги, как аналитика, отчеты о сбоях, аутентификация пользователей и облачные сообщения. Его услуги freemium включают в себя базу данных NoSQL в режиме реального времени, хостинг файлов и статический хостинг веб-сайтов.
В этом уроке я покажу вам, как добавить аутентификацию пользователей, аналитику и удаленное хранилище данных в приложение Android с помощью Firebase.
Предпосылки
Чтобы следовать материалу, вам понадобятся:
- Android Studio 2.2 RC2 или выше
1. Использование Firebase Analytics
Firebase Analytics является одним из самых популярных решений для аналитики мобильных приложений, доступных сегодня. Используя его, вы можете получить точное представление о том, кто ваши пользователи и как они используют ваше приложение.
Шаг 1: Настройка Firebase Analytics
В последних версиях Android Studio есть встроенная поддержка Firebase Analytics. Это означает, что вы можете добавить Firebase Analytics в свой проект, не покидая Android Studio.
Чтобы начать интеграцию Firebase Analytics с вашим проектом, нажмите «Сервис»> «Firebase». Вам будет предоставлено следующее окно помощника:


Нажмите «Аналитика», а затем «Зарегистрировать событие Analytics».
Теперь вы должны связать свой проект Android Studio с проектом Firebase. Поэтому нажмите кнопку «Подключиться к Firebase».
В появившемся диалоговом окне вы сможете увидеть все существующие проекты Firebase. Вы можете выбрать один из них или выбрать новый проект. На данный момент я предлагаю вам выбрать вариант «Создать новый проект Firebase» и дать уникальное имя проекту.


После нажатия кнопки «Подключиться к Firebase», которая находится внутри диалогового окна, Android Studio автоматически выполнит все необходимые изменения конфигурации, такие как создание файла google-services.json и загрузка SHA1.
Теперь вы можете нажать кнопку Добавить Google Analytics, чтобы добавить плагин Firebase и зависимость Firebase Core к вашему проекту. Android Studio покажет вам точные изменения, которые будут внесены в файлы build.gradle.


Нажмите «Принять изменения», чтобы завершить настройку.
Шаг 2: Создание событий Analytics
После того, как вы настроили Firebase Analytics для своего приложения, вам не нужно писать какой-либо дополнительный код, если вас устраивают только автоматически созданные события аналитики, такие как пользователь, открывающий ваше приложение в первый раз, использование приложения дольше чем 10 секунд, совершение покупки в приложении или удаление приложения. Таким образом, вы можете запустить приложение сейчас — на эмуляторе или на реальном устройстве — и в течение следующих 24 часов вы сможете увидеть журналы аналитики в консоли Firebase.


Если вы хотите более внимательно проанализировать поведение своих пользователей, вы можете создавать собственные события аналитики вручную, используя метод logEvent() класса FirebaseAnalytics . Метод ожидает два параметра: строку, определяющую имя настраиваемого события, и Bundle , содержащий сведения о событии в виде пар ключ-значение.
Например, если вы хотите генерировать событие с именем my_custom_event каждый раз, когда пользователь нажимает на определенную кнопку, вам нужно добавить следующий код в обработчик кликов кнопки:
По большей части пользовательские события неотличимы от автоматически собранных событий в консоли Firebase.


Обратите внимание, что имена событий чувствительны к регистру. Поэтому рекомендуется определять все имена событий как постоянные строки. Кроме того, вы можете использовать предопределенные константы имен событий, доступные в классе FirebaseAnalytics.Event .
2. Использование Firebase Auth
Пользовательская аутентификация является важным требованием для большинства приложений Android сегодня. Имея возможность надежно аутентифицировать своих пользователей и, таким образом, уникально идентифицировать их, вы можете предложить им индивидуальный опыт на основе их интересов и предпочтений. Вы также можете убедиться, что у них нет проблем с доступом к своим личным данным при использовании вашего приложения с нескольких устройств.
Firebase Auth позволяет вам аутентифицировать пользователей, используя различные механизмы входа. В этом уроке я покажу вам, как разрешить пользователям входить в ваше приложение, используя их адреса электронной почты и пароли.
Шаг 1: Настройте свой проект
Чтобы иметь возможность использовать Firebase Auth в вашем проекте Android Studio, вы должны добавить следующую compile зависимость к файлу build.gradle модуля app.
Шаг 2. Включение проверки подлинности на основе паролей
По умолчанию Firebase не разрешает аутентификацию пользователя. Таким образом, вы должны вручную включить аутентификацию пользователя на основе пароля в консоли Firebase. Для этого перейдите в раздел Auth и нажмите кнопку «Настройка входа в систему». Теперь вы увидите список всех доступных входных провайдеров.


Выберите «Электронная почта / Пароль», включите его и нажмите «Сохранить».
Шаг 3: Поддержка регистрации пользователей
При аутентификации на основе пароля новые пользователи должны регистрироваться, предоставляя уникальный адрес электронной почты и пароль. Чтобы добавить эту функциональность в свое приложение, вы можете использовать метод createUserWithEmailAndPassword() класса FirebaseAuth . Как следует из названия, метод ожидает, что в качестве аргументов будет указан адрес электронной почты и пароль.
Чтобы определить результат метода createUserWithEmailAndPassword() , вы должны добавить к нему OnCompleteListener , используя метод addOnCompleteListener() . В следующем фрагменте кода показано, как зарегистрировать нового пользователя, а также сообщить, успешно ли завершен процесс регистрации:
Обратите внимание, что вы несете ответственность за проверку адресов электронной почты и убедитесь, что пользователи используют надежные пароли.
Вы можете просмотреть адреса электронной почты всех успешно зарегистрированных пользователей на вкладке «Users» в разделе Auth в консоли Firebase.


Шаг 4: Поддержка входа пользователя
После успешной регистрации пользователь будет автоматически залогинен. Пользователь будет залогинен, даже если ваше приложение перезагрузится. Тем не менее, ваше приложение должно включать код, который позволяет пользователям выполнять вход в систему вручную, используя адрес электронной почты и пароль, которые они указали в процессе регистрации.
Чтобы залогинить пользователя вручную, вы должны использовать метод signInWithEmailAndPassword() класса FirebaseAuth . Метод ожидает адрес электронной почты и пароль в качестве его единственных аргументов и возвращает объект Task<AuthResult> . Добавив к нему OnCompleteListener , вы можете проверить, был ли вход успешно завершен.
Чтобы избежать входа за пользователя, который уже вошел, вы должны вызвать метод signInWithEmailAndPassword() , только если текущий FirebaseUser имеет значение NULL .
В следующем фрагменте кода показано, как залогинить пользователя:
Шаг 5: Поддержка выхода пользователя
Чтобы отписать пользователя, вы можете просто вызвать метод signOut() класса FirebaseAuth .
3. Использование базы данных Firebase в реальном времени
Одна из самых мощных функций платформы Firebase — это база данных в режиме реального времени: все выполняемые на нем операции записи мгновенно доступны для всех клиентов, которые ее наблюдают. С помощью такой базы данных вы можете создавать приложения, которые позволяют пользователям беспрепятственно переключаться с одного устройства на другое, а также мгновенно взаимодействовать с другими пользователями.
Шаг 1: Настройте свой проект
Прежде чем использовать базу данных в режиме реального времени, вам придется добавить следующую compile зависимость к файлу build.gradle вашего модуля app:
Шаг 2: Запись данных
Вы можете представить базу данных в реальном времени как объект JSON. Это означает, что вы можете добавить к нему пары ключ-значение, где ключи всегда являются строками, а значения — это примитивы, массивы или другие объекты JSON.
Прежде чем писать в базу данных реального времени, вы должны получить ссылку на нее с помощью метода getInstance() класса FirebaseDatabase . Затем вы можете получить ссылку на любой путь внутри базы данных с помощью метода getReference() . Путь может содержать либо один ключ, либо несколько ключей, расположенных иерархически.
Когда у вас есть DatabaseReference к пути, вы можете установить его значение с помощью метода setValue() .
В следующем фрагменте кода показано, как добавить в базу данных простую пару «ключ-значение»:
Перейдя в раздел «Database» консоли Firebase, вы можете просмотреть все данные, находящиеся внутри базы данных в режиме реального времени.


Шаг 3: Чтение данных
Чтобы прочитать значение из базы данных в реальном времени, вы должны присоединить асинхронный наблюдатель к связанному ключу или пути. Точнее, вы должны присоединить объект ValueEventListener к объекту DatabaseReference , используя метод addValueEventListener() .
Метод onDataChange() ValueEventListener дает вам доступ к объекту DataSnapshot , метод getValue( ) может использоваться для получения последнего значения ключа.
Например, вот как вы можете получить значение, которое мы установили на предыдущем шаге:
Обратите внимание, что после добавления ValueEventListener метод onDataChange() запускается каждый раз, когда изменяется значение, которое оно отслеживает.
Заключение
Платформа Firebase устраняет необходимость в создании внутреннего сервера и позволяет сосредоточиться на создании лучших приложений. В этом уроке вы научились использовать его для добавления аналитики, аутентификации пользователей и облачного хранилища данных в реальном времени в свое приложение для Android.
Чтобы узнать больше о Firebase, вы можете обратиться к официальной документации. Вы также можете ознакомиться с нашим руководством по использованию Firebase Crash Reporting в Android:
Начало

Откройте приложение в Android Studio и дайте завершиться Gradle sync. Запустите приложение и вы увидите список покупок:

Создание проекта в Firebase Console
Первый шаг — это создание Firebase Console Project. Перейдите на главную страницу консоли Firebase. На этом экране вы увидите один из двух вариантов:
- Если вы никогда раньше не использовали Firebase Console, вам будет предложено ввести приветственное сообщение и приглашение создать проект.

2. Если у вас есть другие проекты, вы увидите их список и белую карточку для добавления проекта.

Нажмите кнопку, чтобы создать проект в зависимости от выбранного варианта. На первом экране вам будет предложено ввести название проекта. В этом случае вы будете использовать то же имя вашего Android приложения, которое называется MyShoppingList.

Нажмите кнопку Continue и на следующем шаге вам будет предложено включить Google Analytics, но это необязательно:

Нажмите кнопку Create project и вы увидите загрузочный экран (рис.6). Загрузка займет немного времени.

Как только процесс будет завершен, иконка загрузки превратится в три оранжевые точки с текстом подтверждения и появится кнопка Continue.

Нажмите на кнопку Continue и вы попадете на главный экран проекта MyShoppingList.

Важно понимать, что этот проект будет работать для многих платформ — не только для Android. Если бы вы собирались интегрировать Firestore в приложение iOS или веб-проект, вы бы использовали тот же самый проект, и вы бы так же могли совместно использовать базу данных на разных платформах.
Добавление Firebase в приложение Android
Начиная с этой части, конфигурация рассчитана только для Android. На главном экране проекта нажмите на маленький белый значок Android, чтобы запустить процесс интеграции.

В качестве первого шага Firebase запросит данные вашего приложения. Добавьте следующее:
- Имя пакета: com.evanamargain.android.myshoppinglist . Это должно быть то же самое имя пакета, что и у вас в приложении. Если вы не уверены и не используете демо-проект, перейдите в app > manifests > AndroidManifest.xml. Пакет будет находиться в первых нескольких строках файла.
- Никнейм: My Shopping List. Это может быть любое название, которое поможет вам запомнить название приложения. Возможно, вы захотите добавить слово “Android”, если хотите отличить его от другого приложения.
- Сертификат SHA-1: он может быть пустым, так как он не пригодится в этом уроке.

После ввода данных вы получите JSON-файл google-services.json . На экране есть инструкции по его интеграции в приложение, но я объясню ниже, если это не совсем понятно.

Перейдите в Android Studio, где у вас открыт проект, и переключите вид на левой панели. Ваш проект, скорее всего, будет находиться в режиме “Android”, и вы получите выпадающее меню с опциями просмотра, как на рисунке 12 ниже:

Выберите Project и увидите дерево файлов, отображаемое так же, как на рисунке ниже. Загрузите файл из консоли Firebase в любое место вашего компьютера, а затем перетащите его в MyShoppingList > app.

Затем снова переключитесь на вид Android на левой панели. Большую часть времени вы будете использовать проекты Android в этом режиме, так как это самый простой способ навигации во время написания кода.

Как только вы доберетесь до представления Android, откройте Gradle Scripts > build.gradle (Project: MyShoppingList . Добавьте этот код:
В той же папке откройте Build.gradle (Module: app) и добавьте следующий код:

Если вы сомневаетесь, произошла ли синхронизация, взгляните на нижнюю панель. Она должна выглядеть так, как показано на рисунке 16 ниже:

Завершение настройки Firebase Console
Затем вернитесь в Firebase Console и нажмите кнопку Next, чтобы подтвердить добавление файла JSON и зависимостей в проект. В нижней части экрана появится заметка, указывающая на то, что Firebase проверяет подключение между вашим приложением и консолью. Соберите и запустите приложение. Оно должно работать и выглядеть также, как и в начале урока. После этого Firebase должен подтвердить подключение и отобразить кнопку Continue to console.

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

Настройка Firestore в Firebase Console
После добавления проекта в Firebase Console и подключения к нему приложения, пришло время настроить базу данных Firestore в консоли. Найдите большую оранжевую кнопку под главным экраном проекта, которая выглядит, как изображение 19 ниже:

Вы получите доступ к странице проекта Firestore и получите приглашение создать Database в виде большого баннера:

Нажмите на кнопку Create database для вывода модального экрана. Сначала он спросит вас о безопасности базы данных. Для разработки и этого урока установите его в “test mode“, но учтите, что для рабочего приложения важно включить “production mode“ для безопасности данных ваших пользователей.

Нажмите кнопку Next, и вам будет предложено указать местоположение сервера. Обычно рекомендуется выбирать наиболее близкое к вам или вашим пользователям место, так как это позволит сократить время загрузки. Консоль Firebase предлагает оптимальный вариант.

Как только вы нажмете на Done, вы увидите загрузку Provisioning Cloud Firestore. Подготовка может занять до трех минут, если сервис слишком загружен, но обычно это занимает меньше времени.

Настройка базы данных
После завершения процесса подготовки вы увидите свою базу данных, как показано на рисунке ниже. База данных пуста и ждет начала работы:

Нажмите на текст “+ start collection”, чтобы создать свою первую коллекцию. База данных имеет многоколоночную структуру, основанную на collections > documents > fields. Согласно демо-приложению, наша коллекция называется MyGroceries, так как в ней будут содержаться все наши наименования продуктов.

Затем для документа вам также будет предложено ввести имя. Это может быть “TodaysGroceries” или дата (например, “March30–2020”), если вы хотите иметь несколько списков в своем приложении.
Добавьте поля с образцами данных:
- Item1 = string — banana
- Item2 =string — peanut butter
- Item3 = string — bread
- …
Добавьте сколько хотите или просто скопируйте данные из нашего приложения.

После того как вы добавили все поля, ваша база данных должна выглядеть так, как показано на рисунке 27 ниже:

Вывод
Теперь у нас есть консоль Firebase и приложение для Android, настроенное на использование Firestore с базой данных.