Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift
Code

Начало работы с Realm Mobile Platform для iOS

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

В этом уроке я продолжу дальше со своего предыдущего урока о Realm Mobile Database для iOS, где мы узнали о Realm Mobile Database, альтернативе Core Data для базы данных на устройстве. Realm также разработала столь же элегантное и "бесшовное" серверное решение, которое синхронизирует наши данные между нашим устройством и облаком в режиме реального времени. Это часть флагманского решения Realm, Realm Mobile Platform.

В этой статье мы установим сервер объектов Realm и улучшим приложение RealmDo, которое мы начали в предыдущем уроке.

Что такое мобильная платформа Realm?

Объявленный в начале 2017 года, Realm Mobile Platform 1.0 представляет собой усилия компании по расширению своей базы данных в облаке и обеспечению поддержки более совместных функций, таких как обмен сообщениями в реальном времени, офлайн-первый опыт и более впечатляющая кросс-платформенность. С помощью нового Real Object Object Server платформа Realm Mobile Platform берет на себя и обрабатывает сложности маршалинга и синхронизации данных между базой данных Realm и сервером.

Realm Mobile Platform выступает в качестве канала между сервером объектов Realm и базой данных Realm Mobile. Когда вы сохраняете данные локально на своем устройстве, она запускается в режиме реального времени, но с возможностью очереди и отсрочки синхронизации в автономном режиме.
Illustration of data flow in Realm Mobile Platform

В дополнение к синхронизации данных (или Realms) между устройствами Realm Object Server также предоставляет службы проверки подлинности и контроля доступа (управление разрешениями), а также обработку событий через функции Realm. Давайте узнаем больше о том, что предлагает Realm Mobile Platform. Обратите внимание, что некоторые из этих функций доступны только для корпоративных клиентов.

Realm Functions

Функции Realm действуют как логический уровень приложения, основанный на JavaScript, что позволяет выполнять пользовательскую логику без выделенного сервера и реагировать на изменения в одной или всех Realms (базах данных).

Через панель управления Realm вы можете создавать, запускать, останавливать и удалять функции, которые реагируют на изменения на одном или нескольких Realms, без серверной обработки событий. Вы создаете функции с помощью JavaScript и Node.js, а функции вызывается глобальным API прослушивания Realm Object Server.

Realm Dashboard screenshot

В настоящее время версия Realm Mobile Platform для разработчиков ограничена тремя активными функциями в любой момент времени, хотя вы можете иметь больше функций, которые неактивны.

Функции Functions выходят за рамки этого урока, но, безусловно, про них стоит почитать.

Realm Dashboard

Панель инструментов Realm поставляется с установкой RealM Object Server, как мы вскоре проиллюстрируем, предоставляя удобный инструмент для управления вашими Realms, управления пользователями и функциями и получения статистики о том, как работает ваш сервер приложений.

Панель управления на основе браузера состоит из следующих разделов:

  • Dashboard обеспечивает статистику передачи данных в реальном времени, открытые соединения и открытые Realms.
  • Realms предоставляют пути, разрешения и владельцы каждого из Realms, и вы можете перемещаться по каждому Realm, чтобы просматривать модели и содержимое отдельных Realm.
  • Users предоставляют информацию и услуги управления для всех пользователей, включая предоставление и удаление административных разрешений.
  • Функции - это то, где вы создаете и управляете своими функциями Realm.
  • Logs позволяют просматривать системные журналы для сервера объектов.

Панель инструментов обычно доступна через путь http://localhost:9080 локально или везде, где находится ваш размещенный сервер.

Связь

Это функция только для enterprise, хотя она очень полезна для некоторых компаний. Realm connection - это канал, который предоставляет корпоративным устаревшим системам платформу через современный шлюз API, что упрощает разработчикам подключение к ранее запутанным источникам данных.

Enterprise Edition сервера объектов Realm предлагает API-интерфейс адаптера на основе Node.js, который позволяет вам получать доступ ко всем операциям и данным на уровне объектов на низком уровне. Их можно использовать, чтобы синхронизировать Realm и взаимодействовать с существующей старой базой данных, такой как PostgreSQL: Realm также будет храниться в синхронизации с внешней базой данных в реальном времени. Клиентские приложения могут использовать API базы данных Realm Mobile и получать преимущества от работы с собственными объектами реального времени.

Уровни обслуживания

В настоящее время компания предлагает три уровня обслуживания. Developer Edition является свободным уровнем для небольших команд, где пользователи получат преимущества от таких функций, как автоматическая синхронизация данных в реальном времени с использованием живых объектов. Professional Edition добавляет дополнительные функции, такие как обработка событий и доступ к серверу.

Realm Mobile Platform pricing table

Удовлетворение потребностей команд среднего размера, Professional Edition является хорошим промежуточным звеном без накладных расходов Enterprise Edition. Затраты корректируются до вашего масштаба, обеспечивая легкий путь миграции из свободного уровня.

Профессиональная версия начинается с 1500 долларов в месяц, а Enterprise Edition - по цене, основанной на использовании.

Ваше первое приложение сервера Realm

Предполагаемые знания

В этом учебном пособии предполагается, что у вас есть знание Swift, но Core Data не требуется. Кроме того, предполагается, что вы прошли предыдущий учебник по базе данных Realm Mobile для iOS и завершили упражнения для создания приложения RealmDo. Мы продолжим с того места, где мы остановились и добавим серверную функциональность в наше приложение RealmDo.

Помимо Realm, мы будем использовать следующие части iOS:

  • UIKit: для визуальной демонстрации наших данных
  • CocoaPods: сторонняя библиотека зависимостей, которая будет использоваться для установки Realm Mobile Database

Цели этого учебника

В конце этого урока вы продолжите работу над своими знаниями о Realm и улучшите простое приложение, написанное в Swift, путем удаленного хранения данных на сервере через Realm Mobile Platform. Вы сможете создать полностью функционирующее приложение с серверным интерфейсом, и по пути вы узнаете следующие понятия:

  1. настройка локального сервера Realm
  2. синхронизация модели «live-object» с Realm Object Server
  3. мониторинг данных через dashboard

Вы можете загрузить полный исходный код этого учебника из репозитория на GitHub.

Настройка Realm Object Server

Прежде чем мы снова откроем Xcode для работы над нашим проектом, нам нужно будет настроить и запустить наш Realm Object Server.

Загрузите пакет macOS, предполагая, что вы будете устанавливать сервер объектов локально на своем Mac. Если вы собираетесь устанавливать его на сервере Linux, обратитесь к документации по Realm.

После завершения загрузки в терминале перейдите в папку Downloads/realm-mobile-platform и запустите сервер, введя команду:

start-object-server.command

Теперь ваш терминал должен указать, что ваш сервер запущен, и ваш браузер автоматически откроется, чтобы запустить панель управления Realm, по адресу http://localhost:9080.

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

Realm registation screen

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

Делаем наш проект Syncable

Теперь мы готовы писать код, поэтому идем и запускаем проект Xcode, над которым мы работали в предыдущем учебнике, поскольку мы будем продолжать строить оттуда в контроллере представления.

Первое, что мы сделаем, это изменим нашу глобальную переменную remindersList, которая будет изменяться, поэтому нам нужно будет изменить ее с объекта RLMResults на тип List. Мы также добавим новый тип объекта NotificationToken, который мы будем использовать, чтобы уведомить нас о том, когда есть изменение в объекте данных области.

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

В методе viewDidLoad() мы внедрим метод SyncUser.logIn(), который является механизмом аутентификации Realm, принимая имя пользователя, пароль и местоположение сервера. Это интересная тема сама по себе, выходящая за рамки данного руководства, но пока мы просто будем жестко кодировать учетные данные, которые мы установили, когда ранее регистрировали наш сервер объектов Realm.

Мы также передаем местоположение сервера вместе с названием realm (базы данных), которую мы хотим использовать http://127.0.0.1:9080. В строке конфигурации realm, помимо местоположения сервера, вы также должны установить имя realm, которое является realmDoApp для целей этой демонстрации. Перейдите и замените viewDidLoad() следующим:

В реальном приложении мы получим учетные данные пользователя с формой. Однако в приведенном выше коде мы жестко кодируем наши учетные данные и устанавливаем пользовательский объект после успешного входа в систему. В противном случае приложение завершится неудачей с фатальной ошибкой.

Наконец, в приведенном выше коде используется синхронный блок для связывания экземпляра realm с сервером объектов realm (вместо базы данных на устройстве). Это отличительная черта, которая делает это приложение облачным.

В конце я инициализирую notificationToken для вызова метода updateRemindersList(), каждый раз, когда происходит изменение данных realm (локально или удаленно).

Блок кода выше также преобразует self.realm.objects(), который он получает с сервера, так что мы можем связать результаты с нашим новым набором объектов List c RemindersList.

Обратите внимание, что это двусмысленно, независимо от того, получаем ли мы данные из нашей базы данных в реальном времени или дистанционно. Это то, что делает Realm отличным - вам не нужно беспокоиться о синхронизации локально или удаленно!

И это все - весь код, необходимый для работы приложения с Realm Object Server. Перед созданием и запуском приложения требуется одна последняя вещь. Откройте файл info.plist проекта в качестве исходного кода, щелкнув правой кнопкой мыши файл. Добавьте следующее, чтобы разрешить выполнение запросов, отличных от TLS.

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

Мониторинг данных через панель мониторинга

Теперь мы собираемся мониторить и контролировать данные через панель управления, которую мы запускали, когда мы запустили сервер объектов Realm. Запуская приложение и панель инструментов бок о бок, вы можете видеть, что когда вы добавляете элемент, он сразу же появляется на панели управления. То же самое происходит, когда вы удаляете элемент, демонстрируя, что он действительно был удалён в режиме реального времени.

Realm Object Server

Мониторинг данных через Realm Browser

Вы также можете использовать Realm Browser для мониторинга ваших данных приложения. В предыдущем уроке мы использовали Realm Browser для просмотра данных на устройстве. Мы также можем использовать его для просмотра данных Realm Object Server.

Запустите приложение, выберите Open Sync URL и введите местоположение области вашего сервера удаленного объекта (например, realm://127.0.0.1:9080/8e090f0fa57366808be106e004800a0f/realmDoApp) вместе с вашим именем пользователя и электронной почтой. Вы должны получить знакомый вид, который мы видели в последнем уроке, только на этот раз мы подключаемся к бэкенду в реальном времени!

Двигаемся дальше и измените свои свойства там, и вы увидите, что это отражено в панели инструментов, а также в вашем приложении.

To-do app showing reminders

Заключение и последующие шаги

В этом уроке вы узнали, как расширить приложение Realm Mobile Database-powered, которое уже очень мощно - с помощью серверного решения. Всего то с несколькими строками кода.

Помимо загрузки и установки Realm Object Server, мы улучшили наше простое приложение напоминаний следующими функциями:

  • простой механизм аутентификации
  • синхронизация в реальном времени 

Наконец, мы увидели, как контролировать данные в реальном времени с помощью панели управления, а также через браузер объектов Realm.

Предпосылка таких платформ, как Realm Object Server, заключается в том, чтобы разработчики сосредоточились на своем клиентском коде и не беспокоились о сложностях ведения внутреннего сервера

В этом руководстве мы только лишь поверхностно рассмотрели Realm. Существует множество документации и концепций с Realm Object Server, включая работу с функциями, позволяющими запускать безсерверную логику.

Вернитесь сюда для получения дополнительных сообщений о внутренних службах для разработки мобильных приложений.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.