В последнее время для разработки веб-приложений стало популярным такое решение, которое называется Firebase. Давайте рассмотрим, что это такое.
А конкретно, в Firebase есть такое понятие как Realtime Database давайте разбираться, что это такое.
Firebase — это комплексная платформа для разработки веб-приложений от компании Google.
Эта платформа — набор определенных сервисов, которые включены в продукт Firebase. Там вы можете увидеть множество сервисов: Cloud Firestore, Cloud Functions и то, о чем мы будем говорить в этом видео — это Realtime Database (база данных в режиме реального времени).
Когда говорят о Firebase, понимают этот сервис.
Используя ее в своей работе мы получаем скорость и удобство работы с данными в реальном времени. Fire (огонь), что-то такое динамичное, постоянно меняющееся.
Что значит режим реального времени?
Благодаря Firebase мы можем создавать такие системы, которые будут обновлять свои данные в режиме реального времени на всех устройствах, которые будут этой системой пользоваться.
Полная копия ВКонтакте VK за 3 часа на React + TypeScript + Firebase + Material UI
В первую очередь, Firebase разрабатывался для мобильных приложений, но вы можете использовать его и для веб-приложений.
Один пользователь пользуется приложением на одном устройстве, другой на другом. Один повзаимодействовал с этой системой, что-то поменял и в режиме реального времени, как только он там что-то поменял, другой пользователь, не перезагружая страницу (в этом основной смысл), данные у него автоматически обновляются.
Такой огромный плюс этой системы.
В традиционном приложении решение такой задачи проблемно.
Realtime database — это хранение и синхронизация данных в реальном времени.
Это документо-ориентированная база данных.
+ Работаем с JSON
Это универсальность работы с разными устройствами и нам не нужно подготавливать из таблиц данные в этот формат.
+ Скорость в разы больше реляционных баз данных.
Уже внутри базы данных данные у нас хранятся в этом формате. Данные хранятся в облаке. Мы можем на любом устройстве перейти в нашу базу данных и что-то там поменять.
Сколько же это стоит?
Идея в том, что в этом сервисе мы платим за то, чем пользуемся. Но, главное, что там есть бесплатный тарифный план и для простых, небольших проектов, вы можете пользоваться Firebase бесплатно.
Конечно, у этого тарифного плана есть ограничения. База данных ограничена в хранении 1GB данных. Но, для того, чтобы разместить 1GB данных, нужно постараться. По объему загрузки лимит 10Gb в месяц.
И еще одно ограничение бесплатного тарифного плана, что на 1 проект может быть только одна база данных.
Но, для разработки каких-то простых приложений это вполне может подойти. Если вам будет нужно что-то более продвинутое, вы всегда можете перейти на платную версию.
Такая идея. Решение, которое в последнее время приобретает все большую популярность.
Ну, и в следующих видео я хотел бы остановиться подробнее как можно пользоваться этой системой. Как взаимодействовать с ней с помощью языка программирования PHP.
Что такое Firebase realtime database
Источник: webkyrs.info
Строим мобильное приложение на Firebase — бесплатном и мощном бэкенде Google
Новый сервис Firebase от Google способен покрыть большинство потребностей мобильного разработчика и решить проблемы, которых у тебя еще нет. Сервис бесплатный при соблюдении лимитов, а чтобы за них выйти, нужно очень постараться. В этой статье я начну перечислять возможности сервиса и поделюсь своим опытом работы с ним.
Сказать, что по нашей улице прошел инкассатор, — это ничего не сказать. Займемся изучением инструмента вплотную!
Farewell VK, hello Firebase
В своих предыдущих статьях я рассматривал VK API как бесплатный бэкенд мобильных приложений. У него есть ряд преимуществ. Хостинг безлимитный, типов контента много, управлять им может даже школьник, достаточно объяснить ему структуру наполнения приложения.
На наше счастье, Google выкупила компанию Firebase и открыла ее для использования всем желающим.
Подробнее, что там есть интересного
Другие статьи в выпуске:
Xakep #218. Смотри во все глаза
- Содержание выпуска
- Подписка на «Хакер» -60%
В нашем распоряжении имеются:
- Analytics — аналитика по приложению: размер аудитории, информация о пользователях, события в приложении и прочее.
- Authentication — пользователи могут привязать свои учетные записи к приложению, а к ним мы можем привязать любые данные. Из коробки поддерживаются следующие провайдеры авторизации: Google, Facebook, Twitter, GitHub, анонимный вход и имейл-пароль для своей регистрации. Не хватает только VK-авторизации.
- Realtime Database — самая настоящая база данных, работает с живыми изменениями в реальном времени.
- Storage — хранилище для файлов пользователей, можно легко сделать персональное хранилище, а можно и делиться файлами.
- Hosting — тут просто моментальное развертывание веб-приложений и мобильных приложений с помощью безопасной глобальной сети доставки контента.
- Test Lab for Android — тестируй приложения Android на самых разных устройствах.
- App Indexing — свяжи информацию с веб-сайта с внутренними страницами приложения, также есть возможность индексировать данные приложения и отображать их в результатах поиска на устройстве.
- Crash Reporting — сбор информации о сбоях в приложении (на ранних версиях и сам был источником крашей, но вроде починили).
- Notifications — уведомления, замена старым Google Cloud Messaging.
- Remote Config — способ менять поведение приложения прямо со своего сервера, изменяя нужные параметры.
- Dynamic Links — полезный способ прокинуть контекст в приложение (например, пользователь читал про аспирин на твоем сайте, перешел в маркет, установил приложение, и ему открылась страница с аспирином).
- AdMob — рекламный сервис с множеством форматов, по праву занимает лидирующие позиции в мобильной рекламе. У этой сети рекламы всегда много, и она модерируется.
А за что попросят деньги?
Деньги с нас справедливо попросят, если наш бизнес действительно разрастется. Когда он упрется в бесплатные лимиты, платить нам уже будет с чего.
Бесплатно нам доступно:
- Realtime Database:
- 100 единовременных подключений
- 1 Гбайт хранилища
- 10 Гбайт в месяц трафика
- 5 Гбайт хранилища
- 1 Гбайт в день трафика
- 20 000 операций загрузок в день
- 50 000 операций скачивания в день
- 1 Гбайт хранилища
- 10 Гбайт в месяц трафика
- Custom domain hosting
- getEmail() — имейл-адрес;
- getUid() — уникальный ID пользователя в системе;
- getDisplayName() — имя пользователя;
- getProviderData().get(1).getProviderId() — подскажет, как пользователь аутентифицировался (проверь на equals(«password») , если через email/пароль).
Имея ссылку на аватар пользователя, можно в одну строчку кода загрузить его и отобразить в приложении. Для этого есть множество сторонних библиотек: Glide, Fresco, Picasso. Но если на счету каждый килобайт, то можно использовать свой AsyncTask. Вызываем загрузку так:
ImageView iv_header = (ImageView) mDrawerHeader.findViewById(R.id.iv_header); if (user.getPhotoUrl() != null)
DownloadImageTask в фоне загружает картинку, а в UI-потоке устанавливает ее в нужный ImageView:
Работа с Realtime Database
Читать данные из Realtime Database можно и не представившись, для описания уровней доступа к информации используются правила. Описываются они в древовидной форме, можно задать отдельные правила на каждую ветвь.
В моем проекте настройки пользователей хранятся в ветке history. Пользователь может читать только свою ветвь и только если он представился. Для проверки работы правил доступа есть симулятор.
В том же разделе можно посмотреть статистику по нагрузке, в моем случае с 2000 идентифицировавшихся пользователей пиковая нагрузка была восемь подключений (до ста еще расти и расти).
Резервные копии на текущем тарифе недоступны, но если бизнес разрастется, то обязательно купим и настроим.
Пишем и читаем данные с Android
Нужно отметить, что все будет работать и без доступа к интернету, а после подключения устройства к Сети все изменения уйдут на сервер Firebase. Когда ты прочитаешь страницу документации, с непривычки может возникнуть ряд вопросов. На практике их будет еще больше.
Начнем с записи. Нам надо получить ссылку на объект DatabaseReference и у него добраться до нужной ветки, в которую будем записывать переменную. Доступные нам типы переменных:
Вот как просто объект User записывается в ветку users:
private void writeNewUser(String userId, String name, String email)
Получить уникальный userId пользователя после аутентификации очень просто: user.getUid() . Чтобы обновить данные, нужно просто вызвать setValue() с новыми данными. Уникальный ключ для каждого объекта позволяют получить методы push() и getKey() . В следующем примере я запрашиваю ключ для еще не добавленной записи, а потом создаю ветку с этим ключом и в нее сохраняю объект:
String key = mDatabase.child(mUserId).push().getKey(); wi.ID = key; Map postValues = wi.toMap(); mDatabase.child(mUserId).child(key).setValue(postValues);
Для чтения данных используются слушатели ValueEventListener, их нужно устанавливать на интересующие нас ветки методом addValueEventListener . Событие будет происходить каждый раз при обновлении данных на сервере, при первом подключении к БД, и просто так про запас еще раза два-три может произойти. Так что будь готов к этому морально и практически. Если тебе нужно прочитать данные один раз и больше не мучиться, то используй метод addListenerForSingleValueEvent .
Вот пример одноразового получения списка объектов для текущего пользователя из ветки history.
А если нам нужно постоянно отслеживать изменяющийся список, то в этом поможет слушатель ChildEventListener, который позволяет слушать не единичный элемент, а всю дочернюю ветку:
Здесь пять событий, сами собой объясняющие свою логику. Будь готов к срабатыванию их, причем многократному: на моем опыте при ручном добавлении элемента из приложения событие onChildAdded для этого элемента отрабатывало три раза.
Узнай своего пользователя при помощи Analytics
Старый инструмент Google Analytics создавался изначально как инструмент для работы с вебом. Позже его адаптировали под нужды мобайла, но ограничение его было существенным. В новой аналитике Firebase собирается данных намного больше. Например, данные об удалении приложения, обновлении ОС на устройстве, очистка кеша приложения. Множество событий отслеживается автоматически и не требует нашего вмешательства.
Если мы хотим собрать события внутри приложения, то нам поможет класс FirebaseAnalytics. В своих проектах, чтобы иметь возможность вызывать методы аналитики в любом месте проекта, я размещаю ссылку на объект аналитики в классе Application. Инициализирую его один раз при создании приложения:
public class App extends Application < private static FirebaseAnalytics mFirebaseAnalytics; public void onCreate() < super.onCreate(); mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); >public static void selectContent(String type, String id) < Bundle bundle = new Bundle(); bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id); bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, type); mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle); >>
Метод select_content можно вызвать одной строчкой. Например, соберем данные по использованию пунктов меню: App.selectContent(«меню»,»окно о-программе») или App.selectContent(«меню»,»окно настройки») .
Установив отслеживание событий в приложении, мы будем знать, что пользователя интересует больше всего. Данные, отправленные методом logEvent , нужно искать в консоли проекта на вкладке «События».
Все события на рисунке собраны системой автоматически, кроме select_content (его реализация описана выше). Вот детали по этому методу (тут ясно видно, куда отправились параметры CONTENT_TYPE и ITEM_ID ):
Полный список событий FirebaseAnalytics доступен тут.
Про подключение и вместо заключения
После настройки всех необходимых модулей Firebase в консоли необходимо получить файл конфигурации с настройками проекта google-services.json . Там же можешь добавить контрольные суммы сертификатов SHA (это можно сделать через ассистент прямо из Android Studio: Tools → Firebase). Я добавляю два сертификата: один от дебаг-ключа и один релизный. Файл google-services.json размести в папку app проекта. В gradle-файле проекта не забудь подключить нужные библиотеки, например:
// Firebase Authentication compile ‘com.google.firebase:firebase-auth:10.0.1’ // Firebase Data Base compile ‘com.google.firebase:firebase-database:10.0.1’ // Google Sign In SDK (only required for Google Sign In) compile ‘com.google.android.gms:play-services-auth:10.0.1’ // Firebase-аналитика compile ‘com.google.firebase:firebase-core:10.0.1’
И в конце допиши apply plugin: ‘com.google.gms.google-services’ , этот плагин обработает файл google-services.json .
Эта статья — только первый подход к такому тяжелому снаряду, как Firebase. Недавно этот снаряд стал еще тяжелее, а значит, нам есть что изучать и использовать.
Думаю, в будущем хакеры найдут достойное применение такой мощной и бесплатной технологии :).
Источник: xakep.ru
Первые шаги в большую разработку с Firebase. Подключение Firebase к Android-приложению
Разработка Android-приложений даже с несколькими пользователями (до 100 человек) подразумевает решение типовых задач, таких как работа с БД, аутентификация и безопасность, которые могут вызвать трудности у начинающих разработчиков. К счастью, в настоящее время существует несколько сервисов для автоматизации этих процессов.
Для успешного решения типовых задач с помощью этих сервисов, было бы хорошо иметь одну работающую инструкцию, а не кучу документации и публикаций, в которых приводятся решения лишь частично, отдельными кусками.
В данном посте я рассмотрю решение типовой задачи при разработке мобильных/web-приложений, а именно добавление аутентификации пользователей с помощью облачного сервиса. Для этого проанализирую актуальный и мощный инструмент Firebase и рассмотрю процесс подключения и реализации аутентификации по шагам.
Сравнение платформ
Сравню 4 платформы: AWS (Amazon Web Services), Firebase, Google Cloud, Microsoft Azure.
Сравнение платформ показало, что Firebase является более удобным и полностью соответствует требованиям к безопасности. Полнота сервисов не критична на этапе знакомства с платформой и может стать проблемой только в узкоспециализированных областях.
Обзор платформы Firebase
Firebase — это облачная платформа, которая предоставляет сервисы для разработки мобильных и веб-приложений, и решения их стандартных задач:
- Authentication – аутентификация пользователей, с помощью нескольких провайдеров (соц. сети, номер телефона, почта).
- Realtime Database и Firestore для синхронизации данных в режиме реального времени и облачного хранения данных.
- Machine Learning для добавления продвинутых функций в приложение.
- Сервисы уведомлений, которые могут использоваться для отправки целевых уведомлений пользователям на основе их поведения и предпочтений.
- Инструменты анализа, которые могут помочь понять, как пользователи взаимодействуют с приложением, а также идентифицировать и исправить проблемы производительности приложения.
- A/B-тестирование разных версий приложения и определения того, какая из них работает лучше.
- Сервисы монетизации для интеграции рекламы в приложение и получения дохода.
Хочу отметить, что у сервиса не просто так два варианта хранения данных. В чем же их отличия?
- Realtime Database — это база данных, основанная на JSON, которая использует древовидную структуру для хранения данных. Она поддерживает быструю синхронизацию данных в реальном времени между клиентскими приложениями и сервером. Простая модель данных -> простая в использовании.
- irestore — это NoSQL база данных, которая использует документы для организации данных. Она предоставляет богатый функционал при создании сложных запросов для поиска данных, а также поддерживает многопоточность. Firestore имеет более гибкую модель данных, чем Realtime Database, что позволяет лучше организовывать данные и управлять ими.
Безопасность
Firebase предоставляет чек-лист безопасности. В нем объясняется, где можно хранить данные и какие инструменты нужно подключить для улучшения надежности приложения.
При использовании внешних БД удостоверьтесь, что вы соблюдаете правила безопасности:
- Не оставляйте секретные ключи в открытом коде!
- Проверьте, что файлы конфигурации не находятся в открытом доступе.
В рамках знакомства с платформой предлагаю подключить Firebase и Authentication. В итоге получится маленький pet-проект на Android со входом в систему.
Инструкция: подключение к Firebase
Шаг 1.
Создаю приложение с готовым пустым шаблоном (empty activity). Проверяю, что все версии зависимостей приложения соответствуют актуальным. После чего удостоверяюсь, что на эмуляторе/устройстве есть сервисы Google Play, иначе ничего не заработает. Перехожу в консоль Firebase.
Шаг 2.
Начинаю процесс подключения Firebase к разрабатываемому Android-приложению . Документация предлагает два варианта подключения, выбираю быстрый и понятный. Для этого жму иконку соответствующей платформы.
Шаг 3.
Открывается меню регистрации. Находим название пакета приложения (com.example.myappnamehere). Достаю ключ SHA-1, например, через Gradle Console в Android Studio с помощью команды gradle signingReport:
Шаг 4.
Для привязки Firebase скачиваю google-services.json. Перемещаю файл конфигурации в корневой каталог модуля (уровень /build.gradle) приложения.
Для того, чтобы файл и приложение увидели друг друга, устанавливаю зависимости:
buildscript < repositories < // Обязательно должны быть эти репозитории google() //Репозиторий Google’s Maven mavenCentral() // Репозиторий Maven Central dependencies < . // Google services Gradle plugin classpath ‘com.google.gms:google-services:4.3.15’ >> // buildscript должен быть выше plugins Переходим в /: plugins < id ‘com.android.application’ // Добавим Google services Gradle plugin id ‘com.google.gms.google-services’ . >
Шаг 5.
Добавляю нужные зависимости в файл Gradle (обычно //build.gradle, там же где только что добавили плагины):
dependencies < // Импортируем Firebase BoM (https://firebase.google.com/docs/android/learn-more?hl=ru#bom) implementation platform(‘com.google.firebase:firebase-bom:31.5.0’) // Добавим зависимости к нужным нам сервисам Firebase // (в данном случае Authentication и Firestore) implementation ‘com.google.firebase:firebase-auth’ implementation ‘com.google.firebase:firebase-firestore’ >
Шаг 6.
Нажимаю кнопку Build. Если приложение не удалось забилдить, то стоит проверить:
- Установлены ли правильно зависимости на всех уровнях?
- В нужном ли месте лежит файл google-services.json?
- Что говорит терминал?
Итак, после установки основы, перейду к реализации аутентификации в проекте.
Инструкция: Настройка Firebase Authentication для авторизации пользователей
Пойду самым простым путем, воспользуюсь библиотекой FirebaseUI. Там уже все приготовлено для старта:
- Элементы и переходы между экранами входа (e-mail, google-аккаунт, социальные сети).
- Кастомизируемые элементы для приведения приложения в общий стиль.
- Экраны кастомизации профиля юзера.
- Экраны привязки аккаунтов к соц. сетям.
Шаг 1.
Подключаю нужные библиотеки. Без этого никак.
dependencies < implementation ‘com.firebaseui:firebase-ui-auth:7.2.0’ // Для логина через Facebook // Новейшие релизы Facebook SDK тут: https://goo.gl/Ce5L94 implementation ‘com.facebook.android:facebook-android-sdk:8.x’ >
Шаг 2.
Включаю опции входа в консоли. Для каждого способа придется включать отдельно.
Важно знать: для подключения входа через соц. сети, придется получить App Id и API Key. Их можно получить на странице для разработчиков нужной платформы.
Шаг 3.
Для опций входа в приложение через Twitter и/или Facebook добавляем строки в strings.xml, обратите внимание на то, что нужно указать YOUR_APP_ID.
YOUR_APP_ID fbYOUR_APP_ID
Как найти свой App ID?
Переходим на главную страницу консоли -> в настройки проекта -> в основных скроллим вниз -> ищем поле App ID.
После чего заново скачаю и заменю файл google-services.json.
Шаг 4.
Создаю отдельную активность LoginActivity.java для входа пользователя. Добавляем функцию ActivityResultLauncher, которая ловит ответ для FirebaseUI.
Создаю createSignInIntent, в котором указываю методы входа. Их будем создавать и запускать через signInIntent. После чего создаю функцию, в которой описываю сценарий удачного/неудачного входа в аккаунт. Если юзер зашел, то получаем объект типа FirebaseUser. При обращении к нему можно получить информацию о юзере, например, user.displayName и т.д.
Если юзер не смог зайти, то ловим ошибки или возвращаемся обратно, тут уже дело за разработчиком. По умолчанию выкинет обратно на экран входа.
Шаг 5.
Не забываю создать файл лэйаута activity_login.xml для отображения активности.
Шаг 6.
Реализую MainActivity.java
И лэйаут для него:
В итоге, я научилась подключать Firebase к приложению, реализовала вход в приложение с помощью Firebase Authentication.
Заключение
Firebase – это разносторонний инструмент для работы с данными, анализ которого и подробный разбор процесса подключения и аутентификации позволил найти простое решение типовой задачи при разработке Android-приложений, а именно добавление аутентификации пользователей с помощью облачного сервиса.
Источник: newtechaudit.ru