Premiers pas avec la plate-forme mobile Realm pour iOS

Dans ce didacticiel, je vais continuer à partir de mon précédent tutoriel sur la base de données Realm Mobile pour iOS, où nous avons appris à propos de la base de données Realm Mobile, une base de données sur périphérique alternative aux données de base. Realm a également développé une solution côté serveur tout aussi élégante et transparente, qui synchronise en temps réel nos données entre notre appareil et le cloud. Cela fait partie de la solution phare de Realm, Realm Mobile Platform.

Dans ce post, nous allons installer un serveur d'objets Realm et améliorer l'application RealmDo que nous avons commencée dans le post précédent..

Qu'est-ce que la plate-forme mobile Realm?

Annoncé au début de 2017, Realm Mobile Platform 1.0 représente les efforts de la société pour étendre sa base de données sur le cloud et fournir un support pour des fonctionnalités plus collaboratives telles que la messagerie en direct, les expériences en mode hors connexion, et plus impressionnant, multiplate-forme. À travers le nouveau serveur d'objets Realm, Realm Mobile Platform prend en charge et gère les complexités du marshaling et de la synchronisation des données entre la base de données Realm et le serveur.. 

La plate-forme mobile Realm agit comme un intermédiaire entre le serveur d'objets Realm et votre base de données Realm Mobile. Lorsque vous conservez des données localement sur votre appareil, elles sont envoyées en temps réel, mais avec la possibilité de mettre en file d'attente et de différer la synchronisation en mode hors connexion..

En plus de la synchronisation des données (ou des domaines) entre les périphériques, Realm Object Server fournit également des services d'authentification et de contrôle d'accès (gestion des autorisations), ainsi que traitement des événements sans serveur à travers les fonctions du royaume. Apprenons-en plus sur quoi Domaine Mobile Platform fournit. Notez que certaines de ces fonctionnalités ne sont disponibles que pour les entreprises..

Fonctions du royaume 

Les fonctions de royaume agissent en tant que couche logique d'application, alimenté par JavaScript, vous permettant d'exécuter une logique personnalisée sans serveur dédié et de réagir aux modifications apportées sur un ou tous les domaines (bases de données).

À l'aide du tableau de bord des domaines, vous pouvez créer, démarrer, arrêter et supprimer des fonctions qui répondent aux modifications apportées à un ou plusieurs domaines, avec la gestion d'événements sans serveur. Vous créez des fonctions à l'aide de JavaScript et Node.js. Ces fonctions sont appelées par le serveur d'objets du royaume. API d'écoute globale.

Actuellement, la version pour développeurs de Realm Mobile Platform est limitée à trois fonctions actives à tout moment, bien que vous puissiez avoir plus de fonctions inactives.. 

Les fonctions de domaine n'entrent pas dans le cadre de ce didacticiel, mais méritent certainement d'être lues.

Tableau de bord de royaume

Le tableau de bord des royaumes est livré avec l'installation du serveur d'objets du royaume, comme nous allons le montrer, fournissant un outil pratique pour gérer vos domaines, gérer les utilisateurs et les fonctions, et donner une impulsion au fonctionnement de votre serveur d'applications..

Le tableau de bord basé sur un navigateur comprend les sections suivantes:

  • Tableau de bord fournit une impulsion en temps réel des débits de données entrants et sortants, des connexions ouvertes et des royaumes ouverts.
  • Les royaumes fournit les chemins, les autorisations et les propriétaires de chacun des royaumes, et vous pouvez parcourir chaque royaume pour afficher les modèles et le contenu de chaque royaume.
  • Utilisateurs fournit des informations et des services de gestion pour tous les utilisateurs, y compris l'octroi et la suppression d'autorisations administratives.
  • Les fonctions est l'endroit où vous créez et gérez vos fonctions de royaume.
  • Les journaux est l'endroit où vous pouvez afficher les journaux système du serveur d'objets.

Le tableau de bord est normalement accessible via le chemin http: // localhost: 9080 localement ou à l'emplacement de votre ordinateur hébergé.. 

Connexion de royaume

Ceci est une fonctionnalité réservée aux entreprises, bien que très utile pour certaines entreprises.. Connexion de domaine est un canal qui expose les systèmes hérités de l'entreprise à la plate-forme via une passerelle d'API moderne, facilitant ainsi pour les développeurs l'accès à des sources de données précédemment masquées.

L'Edition Enterprise du serveur d'objets Realm propose une API d'adaptateur basée sur Node.js qui vous permet d'accéder à toutes les opérations et données de serveur d'objets de niveau inférieur. Cela peut être utilisé pour permettre à un royaume synchronisé d'interagir avec une base de données existante telle que PostgreSQL: le royaume sera également synchronisé avec la base de données externe en temps réel. Les applications client peuvent utiliser l'API de base de données Realm Mobile et tirer parti des avantages de l'utilisation d'objets natifs en temps réel..

Niveaux de service

La société propose actuellement trois niveaux de service. le Developer Edition est la couche gratuite pour les petites équipes, où les utilisateurs bénéficieraient de fonctionnalités telles que la synchronisation automatique des données en temps réel à l'aide d'objets vivants. le Edition Professionnelle ajoute des fonctionnalités avancées telles que la gestion des événements et l'accès côté serveur.

Répondant aux demandes des équipes de taille moyenne, le Edition Professionnelle est un bon moyen terme sans les frais généraux de la Edition pour entreprise. Les coûts sont ajustés à votre échelle, offrant un chemin de migration facile à partir du niveau gratuit.

L’édition professionnelle commence à 1 500 dollars par mois et l’édition entreprise est facturée en fonction du cas d’utilisation..

Votre première application de serveur de royaume

Connaissance supposée

Ce tutoriel suppose que vous maîtrisiez bien Swift, mais qu'aucune connaissance préalable des bases de données ni des bases de données ne soit nécessaire. De plus, il est supposé que vous avez suivi le didacticiel précédent sur la base de données Realm Mobile pour iOS et que vous avez terminé les exercices pour créer l'application RealmDo. Nous allons continuer à partir de là où nous nous sommes arrêtés dans cet article et ajouter des fonctionnalités côté serveur à notre application, RealmDo..

En plus de Realm, nous utiliserons les parties suivantes d'iOS:

  • UIKit: pour montrer nos données visuellement
  • CocoaPods: une bibliothèque de dépendances tierce qui sera utilisée pour installer la base de données Realm Mobile

Objectifs de ce tutoriel 

À la fin de ce didacticiel, vous pourrez continuer à développer vos connaissances de Realm et à améliorer l'application simple à faire écrite dans Swift, en conservant les données à distance sur le serveur via Realm Mobile Platform. Vous aurez la possibilité de créer une application de tâches entièrement fonctionnelle, alimentée par le royaume, avec une interface serveur, et en même temps, vous apprendrez les concepts suivants:

  1. configurer le serveur d'objets du royaume localement
  2. Synchroniser le modèle 'live-object' avec le Realm Object Server
  3. suivi des données via le tableau de bord

Vous pouvez télécharger le code source complet à partir du tutoriel GitHub repo.

Configurer le serveur d'objets de domaine

Avant que nous appuyions à nouveau sur Xcode pour travailler notre projet, nous devrons configurer et faire fonctionner notre serveur d'objets Realm.. 

Téléchargez le kit macOS en supposant que vous installerez Object Server localement sur votre Mac. Si vous envisagez de l’installer sur un serveur Linux, reportez-vous à la documentation du royaume..

Une fois le téléchargement terminé, dans le terminal, accédez à votre Téléchargements / realm-mobile-platform dossier et démarrez le serveur en tapant:

start-object-server.command

Votre terminal doit maintenant indiquer que votre serveur est en train de démarrer et votre navigateur s'ouvrira automatiquement pour lancer le tableau de bord du royaume, à l'adresse http: // localhost: 9080..

Vous serez invité à vous enregistrer en tant que nouvel utilisateur et à fournir un email et un mot de passe lors de la première utilisation du serveur. Allez-y, terminez le processus d'inscription et gardez vos identifiants en mémoire, car vous les utiliserez plus tard..

Laissez cette fenêtre de navigateur ouverte car nous y reviendrons plus tard lorsque nous exécuterons notre application complète, afin d'observer comment les données sont stockées sur le serveur..

Rendre notre projet syncable

Nous sommes maintenant prêts à commencer à coder, alors lancez le projet Xcode sur lequel nous travaillions dans le précédent tutoriel, car nous allons continuer à construire à partir de là, dans le contrôleur de vue..

La première chose à faire est de modifier notre rappels variable globale pour être mutable, nous aurons besoin de le changer d'un RLMRésultats objecter à un liste type. Nous allons également ajouter un nouveau type d'objet, NotificationToken, que nous utiliserons pour nous informer de tout changement dans l'objet de données du domaine. 

NotificationToken ce n'est pas un objet spécifique au serveur, et nous aurions pu l'utiliser dans notre précédent tutoriel, mais il est certainement utile lorsque nous voulons détecter les changements en temps réel à distance ou localement et réagir en conséquence.

var notificationToken: Notification? var rappelersList = Liste()

Dans le viewDidLoad () méthode, nous allons intégrer un SyncUser.logIn () method, qui est le mécanisme d'authentification de Realm, accepte un nom d'utilisateur, un mot de passe et l'emplacement du serveur. Il s'agit d'un sujet intéressant en soi, qui dépasse le cadre de ce didacticiel, mais pour l'instant, nous allons simplement coder en dur les informations d'identification que nous avons définies lors de l'enregistrement précédent de notre serveur d'objets Realm..

Nous transmettons également l'emplacement du serveur, ainsi que le nom du domaine (base de données) que nous souhaitons utiliser, à savoir http://127.0.0.1:9080. Dans la ligne de configuration du domaine, vous devez également définir le nom du domaine, en plus de l'emplacement du serveur. realmDoApp aux fins de cette démonstration. Allez-y et remplacez votre viewDidLoad () avec ce qui suit:

override func viewDidLoad () super.viewDidLoad () tableView.register (UITableViewCell.self, forCellReuseIdentifier: "cell") // Vous devez faire en sorte que le nom d'utilisateur et le mot de passe saisis par l'utilisateur soient pris en charge. SyncUser.logIn (avec: .usernamePassword (nomutilisateur: [email protected] ", mot de passe:" test123 ", registre: false), serveur: URL (chaîne:" http://127.0.0.1:9080 ")!) utilisateur, erreur dans la protection laisser utilisateur = utilisateur sinon  fatalError (String (description: erreur)) DispatchQueue.main.async (execute: // Le domaine ouvert permet la configuration = Realm.Configuration (syncConfiguration: SyncConfiguration (utilisateur: realmURL: URL (chaîne: "realm: //127.0) .0.1: 9080 / ~ / realmDoApp ")!)) Self.realm = try! Realm (configuration: configuration) // Définition du bloc de notification de domaine self.notificationToken = self.realm.addNotificationBlock _ dans self.updateRemindersList () self .updateRemindersList ())

Dans une application réelle, nous obtiendrions les informations d'identification de l'utilisateur avec un formulaire. Dans le code ci-dessus, cependant, nous codons en dur nos informations d'identification et définissons un objet utilisateur une fois la connexion établie. Sinon, l'application échouera avec une erreur fatale.

Enfin, le code ci-dessus utilise un bloc synchrone pour associer l'instance de domaine au serveur d'objets de domaine (au lieu de la base de données sur le périphérique). C’est la ligne distinctive qui rend cette application basée sur le cloud. 

A la fin, j'initialise le notificationToken appeler une méthode, updateRemindersList (), chaque fois qu'il y a un changement dans les données du royaume (localement ou à distance).

func updateRemindersList () if self.remindersList.realm == nil self.remindersList = self.realm.objects (Reminder.self) .reduce (Liste()) (liste, élément) -> Liste dans list.append (element) return list self.tableView.reloadData () 

Le bloc de code ci-dessus convertit également le self.realm.objects () il reçoit du serveur, de sorte que nous puissions associer les résultats à notre nouveau liste-tapé RappelsListe ensemble d'objets.

Notez comme il est ambigu de savoir si nous obtenons les données de notre base de données de royaume ou à distance. C’est ce qui fait que Realm est formidable: vous n’avez pas à vous soucier de la synchronisation locale ou à distance!

Et c'est tout le code nécessaire pour que l'application fonctionne avec Realm Object Server. Une dernière chose est nécessaire avant de créer et d’exécuter l’application. Ouvrez le projet info.plist comme Code source en faisant un clic droit sur le fichier. Ajoutez les éléments suivants pour permettre aux demandes non-TLS de fonctionner. 

NSAppTransportSecurity  NSAllowsArbitraryLoads   

A présent, construisez, puis exécutez l'application et ajoutez quelques nouveaux rappels. Nous allons maintenant basculer vers le navigateur, où nous pouvons voir le serveur en cours d'exécution et accéder à son tableau de bord pour observer les données en cours de remplissage dans un nouveau domaine..

Surveillance des données via le tableau de bord

Nous allons maintenant surveiller et superviser les données via le tableau de bord que nous avons lancé lorsque nous avons démarré le serveur d'objets Realm. En exécutant l'application et le tableau de bord côte à côte, vous pouvez constater que lorsque vous ajoutez un élément, il apparaît immédiatement sur le tableau de bord. La même chose se produit lorsque vous supprimez un élément, démontrant qu'il est bien en temps réel..

Surveillance des données via le navigateur de domaines

Vous pouvez également utiliser le navigateur de royaume pour surveiller les données de votre application. Dans le didacticiel précédent, nous avons utilisé le navigateur de royaume pour afficher nos données sur le périphérique. Nous pouvons également l'utiliser pour voir les données du serveur d'objets du royaume. 

Lancez l'application, sélectionnez Ouvrir l'URL de synchronisation, et tapez l’emplacement de votre domaine de serveur d’objets distant (par exemple,. realm: //127.0.0.1: 9080 / 8e090f0fa57366808be106e004800a0f / realmDoApp) ainsi que votre nom d'utilisateur et votre email. Vous devriez obtenir la vue familière que nous avons vue dans le dernier tutoriel, mais cette fois-ci nous nous connectons à un back-end en temps réel!

Allez-y et changez vos propriétés là-bas, et vous devriez voir cela reflété dans le tableau de bord ainsi que dans votre application..

Conclusion et prochaines étapes 

Dans ce tutoriel, vous avez appris comment étendre une application alimentée par une base de données Realm Mobile, déjà très puissante, avec une solution de serveur dorsal. Tous avec seulement quelques lignes de code. 

Outre le téléchargement et l'installation de Realm Object Server, nous avons amélioré notre application de rappels simples avec les fonctionnalités suivantes:

  • un mécanisme d'authentification simple
  • synchronisation en temps réel

Enfin, nous avons vu comment surveiller les données en temps réel via le tableau de bord, ainsi que via le navigateur d’objets Realm..

Le principe de plates-formes telles que Realm Object Server est de permettre aux développeurs de se concentrer sur leur code côté client et de ne pas s'inquiéter de la complexité liée à la maintenance d'un serveur principal.

Nous venons de gratter la surface dans ce post. Il existe de nombreux documents et concepts relatifs à Realm Object Server, notamment l'utilisation de fonctions permettant un déclenchement logique sans serveur.. 

Revenez ici pour plus d'articles sur les services back-end pour le développement d'applications mobiles.