Мгновенное обновление данных через Realm Mobile Platform (10 строк кода!).
Проблема
Проблема обновления данных приложения в современной разработке стоит достаточно остро, т.к. пользователи ожидают от вашего приложения мгновенного получения данных, уведомления о событиях. Этого можно добиться несколькими способами: либо делать частые запросы на сервер(что является в корне неправильным, так как частые запросы на сервер могут временно вывести его из строя, что приведет в худшем случае к потере пользователей), либо использовать Websocket, для использования которых необходимы дополнительные знания(установка на сервер, реализация кодом, и написание сложной логики синхронизации, обработка ошибок).
Решение
Компания Realm, базу данных которой используют многие разработчики, пытаясь решить эту проблему, выпустила релиз Realm Mobile Platform, которая призвана существенно сократить время разработки.
Realm Mobile Platform представляет собой взаимодействие в реальном времени между Realm Object Server (программного обеспечения установленного на ваш сервер) и вашим приложением. Сервер и приложение, между которыми установлена связь, используют одни и те же модели, одну и ту же базу данных. Синхронизация данных, между сервером и устройством при внесении изменений в базу данных происходит мгновенно. Так же у этой системы взаимодействия между сервером и приложением есть ряд особенностей, которых нет у конкурентов, а именно:
- система берет на себя разучивание любых конфликтов
- отсутствие интернета не проблема, система сама дождется его появления и внесет необходимые изменения
- в данную систему встроена обработка ошибок
Где же это применить?
Возможности абсолютно безграничны: от простых приложений, где нужно синхронизировать данные между устройствами пользователя, до разработки игр(где взаимодействие между пользователями происходит в реальном времени), разработке чатов и т.д.
Пример использования Realm Mobile Platform от компании Realm:
Начало использования
Для использования Realm Mobile Platform необходимо наличие приложения, использующего базу данных Realm(только на ее основе можно использовать Realm Mobile Platform), а так же установленный на ваш сервер Realm Object Server. Встроив буквально 10 строк кода в существующий проект, вы сможете использовать все преимущества данной системы.
Установка Realm Object Server
Установка Realm Object Server осуществляется максимально просто и состоит из выполнения на сервере ряда команд(вопросы аренды сервера, создании sudo пользователя, использования SSH протокола для выполнения команд на сервере частично затронуты здесь.
Мы будем использовать для этого VSD сервер с предустановленной Ubuntu 16.04. Если вы используете другую операционную систему, то для установки Realm Object Server воспользуйтесь официальной документацией.
Для установки Realm Object Server необходимо выполнить на сервере поочередно следующие команды:
# Setup Realm's package repository
curl -s https://packagecloud.io/install/repositories/realm/realm/script.deb.sh | sudo bash
# Update repositories
sudo apt-get update
# Install the Realm Object Server
sudo apt-get install realm-object-server-developer
# Enable and start the service
sudo systemctl enable realm-object-server
sudo systemctl start realm-object-server
После чего, если вы все правильно сделали, сервер будет успешно запущен, и набрав в браузере IP_ВАШЕГО_СЕРВЕРА:9080 , вы должны попасть в панель управления Realm Object Server и увидеть поле регистрации admin пользователя.
Пройдя простую регистрацию, мы попадаем в панель управления сервером, которая выполняет ряд функций, таких как управление пользователями, просмотри логов и многое другое.
На стороне сервера больше ничего делать не нужно, сервер прекрасно функционирует. Приступим к внедрению кода в проект Xcode.
Реализация в Xcode
Работу Realm Mobile Platform мы будем проверить на примере приложения список покупок, которое можно скачать здесь. Изначально в нем нет никакого кода для синхронизации с сервером, с помощью него можно только добавлять товары и вычеркивать их из списка, если они куплены.
Приложение использует базу данных Realm, если кто-то с ней не знаком, почитать ее документацию можно здесь. Все очень просто и понятно!
Приступим к реализации синхронизации с сервером, это сделать очень достаточно просто. В модели товара Good добавляем следующий код, где 1 это ip адрес вашего сервера, а 2 это логин и пароль сервера
Далее добавляем необходимый код в TableViewContoller, где номер 1 - это NotificationToken (необходим для получения уведомлений об изменениях в базе), 2 - это блок кода отвечающий за вход пользователя по своему логину и паролю, 3 - это notificationBlock, который вызывает обновления при любых изменениях в базе данных.
Скачать готовый проект можно здесь. Не забудьте вписать свой ip адрес, имя пользователя и пароль. Иначе приложение работать не будет!
Если все сделано правильно, то приложение уже работает! Вы можете установить его на несколько устройств и видеть как классно работает синхронизация в реальном времени!
Demo
Для демонстрации работы я буду использовать Realm Browser(можно скачать из Mac App Store), с помощью которого можно напрямую подключиться к базе данных сервера, видеть и вносить изменения в реальном времени.
Для этого нужно запустить Realm Browser, выбрать пункт Open Realm URL, заполнить данные аналогично картинке:
Где поле 1 это URL базы данных (на место замазанной информации введите свой ip), поле 2 это имя пользователя и поле 3 это пароль. После нажатия кнопки open произойдет подключение к серверу. Предлагаю посмотреть следующее видео, чтобы понять как это работает:
Локальный запуск Realm Mobile
Если у вас нет сервера, то вы можете протестировать Realm Mobile Platform локально. Вам необходимо скачать сборку Realm Mobile Platform с сайта Realm или по ссылке.
В папке с проектом вы найдете файл start-object-server.command, который необходимо запустить. После этого Realm Object Server запустится на вашем mac локально. Зарегистрируйтесь в панели управления (откроется автоматически), после этого перейдите в папку Demo, далее в папку RealmTasks, потом в папку RealmTasks Apple и откройте проект (в проекте используется cocoapods, поэтому нужно открывать .xcworkspace). После запуска проекта в Xcode, выберите в верхнем списке RealmTasks ios приложение и запустите его в симуляторе. Далее просто залогиньтесь в открывшемся приложении (под тем же аккаунтом, что вы создали в панели управления). Тоже самое проделайте в Mac приложении RealmTasks, находящиеся в папке Demo -> RealmTasks. После этого вы можете протестировать работу Realm Mobile Platform! Результат на коротком видео:
Выводы
Realm Mobile Platform позволяет без особых знаний, даже новичку, реализовать взаимодействие между его приложениями в реальном времени за короткое время. Как этим пользоваться решать уже вам, от себя лишь скажу, что компания Realm создает отличные продукты, в первую очередь нацеленные на простоту и удобство. Пользоваться всем этим или нет - решать только вам.
P.S. Конечно же, приведенные примеры это простейшая реализация для получения общих представлений. На сайте Realm присутствует всеобъемлющая документация, которая позволит вам использовать Realm Mobile Platform в полной мере.
Автор статьи: Сергей Зазуля