Komme i gang med Realm Mobile Platform for iOS

I denne opplæringen fortsetter jeg fra min forrige veiledning på Realm Mobile Database for iOS der vi lærte om Realm Mobile Database, en on-device database alternativ til Core Data. Realm har også utviklet en like elegant og sømløs server-side løsning som synkroniserer våre data mellom enheten og skyen i sanntid. Dette er en del av Realms flaggskipløsning, Realm Mobile Platform.

I dette innlegget vil vi installere en Realm Object Server og forbedre på RealmDo-appen som vi startet i forrige innlegg.

Hva er Realm Mobile Platform?

Realm Mobile Platform 1.0 er annonsert tidlig i 2017, og representerer selskapets innsats for å utvide sin database på skyen og gi støtte til flere samarbeidsfunksjoner som live messaging, offline-første erfaringer og mer imponerende, cross-platform. Gjennom den nye Realm Object Server tar Realm Mobile Platform over og håndterer kompleksiteten til marshaling og synkronisering av data mellom Realm Database og server. 

Realm Mobile Platform fungerer som en kanal mellom Realm Object Server og Realm Mobile Database. Når du vedvarer data lokalt på enheten din, blir den trykket i sanntid, men med muligheten til å kjøre og utsette synkronisering når den er offline.

I tillegg til å synkronisere data (eller Realms) mellom enheter, tilbyr Realm Object Server også autentisering og tilgangskontrolltjenester (tillatelsesadministrasjon), så vel som serverløs hendelsebehandling gjennom Realm Funksjoner. La oss lære mer om hva Realm Mobile Platform gir. Vær oppmerksom på at noen av disse funksjonene kun er tilgjengelige for bedriftskunder.

Realm Funksjoner 

Rikefunksjoner fungerer som app logikk lag, drevet av JavaScript, slik at du kan utføre tilpasset logikk uten en dedikert server og svare på endringer på en eller alle Realms (databaser).

Gjennom Realm Dashboard kan du forfattere, starte, stoppe og slette funksjoner som svarer på endringer i en eller flere realmer, med serverløs hendelseshåndtering. Du oppretter funksjoner ved hjelp av JavaScript og Node.js, og funksjonene kalles av Realm Object Server global lytte-API.

Foreløpig er utviklerutgaven av Realm Mobile Platform begrenset til tre aktive funksjoner til enhver tid, selv om du er i stand til å ha flere funksjoner som er inaktive. 

Realm Funksjoner er utenfor omfanget av denne opplæringen, men absolutt verdt å lese på.

Realm Dashboard

Realm Dashboard kommer bak med Realm Object Server-installasjonen, som vi snart vil illustrere, og gir et praktisk verktøy for å administrere Realms, administrere brukere og funksjoner, og få en puls på hvordan applikasjonsserveren kjører.

Det nettbaserte dashbordet består av følgende seksjoner:

  • dashbord gir en sanntidspuls av datahastigheter inn og ut, åpne forbindelser og åpne Realms.
  • Rikene gir stier, tillatelser og eiere av hver av Rikene, og du kan krysse ned hvert Rike for å se modellene og innholdet i de enkelte Riksmelene.
  • brukere gir informasjon og administrasjonstjenester for alle brukere, inkludert tildeling og fjerning av administrative tillatelser.
  • funksjoner er der du oppretter og administrerer Realm-funksjoner.
  • logger er der du kan se Systemlogger for Object Server.

Dashbordet er normalt tilgjengelig via http: // localhost: 9080-banen lokalt, eller hvor din vertsmaskin ligger. 

Realm-tilkobling

Dette er en bedrift-eneste funksjon, men veldig nyttig for noen bedrifter. Realm-tilkobling er en kanal som avslører bedriftens arvssystemer til plattformen gjennom en moderne API-gateway, noe som gjør det enklere for utviklere å koble seg til tidligere obfuscated datakilder.

Enterprise Edition av Realm Object Server tilbyr en Node.js-basert adapter API som lar deg få tilgang til alle operasjoner og data på lavt nivå i objektserver. Dette kan brukes til å la en synkronisert Realm samhandle med en eksisterende eldre database som PostgreSQL: Realm vil også bli holdt synkronisert med den eksterne databasen i sanntid. Klientprogrammer kan bruke Realm Mobile Database API og få fordelene ved å jobbe med real-time, innfødte objekter.

Service Tiers

Selskapet tilbyr for tiden tre nivåer av service. De Utviklerutgave er gratis-nivået for små lag, hvor brukerne vil dra nytte av funksjoner som sanntid automatisk datasynkronisering ved hjelp av levende objekter. De Profesjonell utgave legger til avanserte funksjoner som hendelseshåndtering og server-side tilgang.

Catering til kravene til mellomstore lag, Profesjonell utgave er en god midtvei uten overhead av Enterprise Edition. Kostnadene er justert på skalaen din, og gir en enkel migreringsbane fra fritt nivå.

Den profesjonelle utgaven starter på $ 1500 per måned, og Enterprise Edition er tilpasset priset basert på brukstilfellet.

Din First Realm Server App

Forutsatt kunnskap

Denne opplæringen forutsetter at du har arbeidskunnskap om Swift, men det er ikke behov for kjernedata eller tidligere databasekunnskaper. I tillegg antas det at du har gått gjennom forrige veiledning på Realm Mobile Database for iOS og har fullført opplæringsøvelsene for å lage RealmDo-appen. Vi skal fortsette fra hvor vi sluttet i det innlegget, og legg til server-side funksjonalitet til vår app, RealmDo.

I tillegg til Realm bruker vi følgende deler av iOS:

  • UIKit: å demonstrere våre data visuelt
  • CocoaPods: et tredjeparts avhengighetsbibliotek som vil bli brukt til å installere Realm Mobile Database

Målet med denne opplæringen 

Ved slutten av denne opplæringen har du fortsatt å bygge videre på din kunnskap om Realm og forbedre den enkle å gjøre appen som er skrevet i Swift, ved å vedvare data på serveren via Realm Mobile Platform. Du får opprette en fullt fungerende Realm-powered-to-do-app med en server-sideback-end, og underveis lærer du følgende begreper:

  1. Konfigurere Realm Object Server lokalt
  2. synkroniserer 'live-object'-modellen til Realm Object Server
  3. overvåking av data via dashbordet

Du kan laste ned den komplette kildekoden fra opplæringen GitHub repo.

Sett opp Realm Object Server

Før vi treffer Xcode igjen for å jobbe med vårt prosjekt, må vi sette opp og få vår Realm Object Server å kjøre. 

Last ned macOS-pakken, forutsatt at du vil installere Object Server lokalt på din Mac. Hvis du skal installere den på en Linux-server, kan du se dokumentasjonen for Realm.

Når du har fullført nedlastingen, navigerer du i terminalen til din Nedlastinger / riket-mobil-plattform mappe og starte serveren ved å skrive:

start-objekt-server.command

Din terminal skal nå indikere at serveren din starter, og nettleseren din åpnes automatisk for å starte Realm Dashboard på http: // localhost: 9080.

Du vil bli bedt om å registrere deg som ny bruker og gi en e-post og et passord første gang du kjører serveren. Vennligst fortsett og fullfør registreringsprosessen og husk legitimasjonene dine, som du vil bruke dem senere.

Hold dette nettleservinduet åpent da vi kommer tilbake til det senere når vi kjører vår komplette app, for å observere hvordan data lagres på serveren.

Gjør vårt prosjekt synkroniserbart

Nå skal vi starte kodingen, så fortsett og brann opp Xcode-prosjektet vi jobbet med i den forrige opplæringen, da vi skal fortsette å bygge derfra, i visningsregulatoren.

Det første vi skal gjøre er å endre vår remindersList global variabel å være mutable, så vi må endre den fra en RLMResults protester mot a Liste type. Vi legger også til en ny objekttype, NotificationToken, som vi vil bruke til å varsle oss om når det er en endring i realm-dataobjektet. 

NotificationToken er ikke et serverspesifikt objekt, og vi kunne ha brukt det i vår tidligere opplæring, men det kommer sikkert til nytte når vi vil oppdage sanntidsendringer eksternt eller lokalt og reagerer tilsvarende.

var notificationToken: Varsling? var påminnelserListe = Liste()

Innen viewDidLoad () metode, vil vi legge inn en SyncUser.logIn () metode, som er Realms autentiseringsmekanisme, aksepterer brukernavn, passord og serverplassering. Dette er et interessant emne i seg selv, utover omfanget av denne opplæringen, men for nå vil vi bare hardkode i legitimasjonene vi angir da vi registrerte vår Realm Object Server tidligere.

Vi sender også inn på serverplasseringen sammen med navnet på riket (databasen) vi vil bruke, som er http://127.0.0.1:9080. I rike konfigurasjonslinjen, i tillegg til serverplasseringen, må du også angi navnet på rike, som er realmDoApp i forbindelse med denne demonstrasjonen. Gå videre og erstatt din viewDidLoad () med følgende:

overstyr func viewDidLoad () super.viewDidLoad () tableView.register (UITableViewCell.self, forCellReuseIdentifier: "celle") // Du bør gjøre brukernavnet brukernavn og passord støttet SyncUser.logIn (med: .navnnavnPassord (brukernavn: " [email protected] ", passord:" test123 ", register: false), server: URL (streng:" http://127.0.0.1:9080 ")!) bruker, feil i vakt la bruker = bruker annet  fatalError (String (beskriver: feil)) DispatchQueue.main.async (utfør: // Open Realm la konfigurasjon = Realm.Configuration (syncConfiguration: SyncConfiguration (bruker: bruker, realmURL: URL (streng: "realm: //127.0 .0.1: 9080 / ~ / realmDoApp ")!)) Self.realm = prøv! Realm (konfigurasjon: konfigurasjon) // Sett realm notifikasjon blokk self.notificationToken = self.realm.addNotificationBlock _ in self.updateRemindersList () selv .updateRemindersList ())

I en virkelig applikasjon vil vi få brukerens legitimasjon med et skjema. I koden ovenfor skjønner vi imidlertid våre legitimasjonsbeskrivelser og angir et brukerobjekt når innloggingen er vellykket. Ellers vil applikasjonen mislykkes med en dødelig feil.

Til slutt bruker koden over en synkron blokk for å knytte realm-forekomsten til realm-objektserveren (i stedet for databasen på enheten). Dette er den særegne linjen som gjør denne appen skybasert. 

På slutten initialiserer jeg notificationToken å ringe en metode, updateRemindersList (), hver gang det er en endring i realm-dataene (lokalt eller eksternt).

func updateRemindersList () hvis self.remindersList.realm == nil self.remindersList = self.realm.objects (Reminder.self) .reduce (List()) (liste, element) -> Liste i list.append (element) returliste self.tableView.reloadData () 

Koden blokk over konverterer også self.realm.objects () Den mottar fra serveren, slik at vi kan knytte resultatene med vår nyhet Liste-skrevet RemindersList sett med objekter.

Legg merke til hvordan det er tvetydig om vi får dataene fra vår rike database eller eksternt. Dette gjør Realm stor - du trenger ikke å bekymre deg for synkronisering lokalt eller eksternt!

Og det er det - alt koden som trengs for å få appen til å fungere med Realm Object Server. Det er en siste ting som trengs før du bygger og kjører appen. Åpne prosjektet Info.plist som Kildekode ved å høyreklikke på filen. Legg til følgende for å tillate ikke-TLS-forespørsler til å fungere. 

NSAppTransportSecurity  NSAllowsArbitraryLoads   

Nå, fortsett og bygg og kjør programmet, og legg til noen få nye påminnelser. Vi bytter over til nettleseren nå, der vi kan se den løpende serveren og få tilgang til dashbordet for å observere data som blir fylt inn i et nytt rike.

Overvåking av data via Dashboard

Nå skal vi overvåke og overvåke dataene via dashbordet som vi lanserte da vi startet Realm Object Server. Kjører appen og dashbordet ved siden av, kan du se at når du legger til et element, vises det umiddelbart oppe på dashbordet. Det samme skjer når du fjerner et element, og viser at det faktisk er sanntid.

Overvåking av data via Realm Browser

Du kan også bruke Realm Browser til å overvåke appdataene dine. I den forrige veiledningen brukte vi Realm Browser til å se våre data på enheten. Vi kan også bruke den til å vise Realm Object Server-data. 

Start appen, velg Åpne synkroniseringsadresse, og skriv inn plasseringen av din fjerntliggende objektserver-verden (f.eks. riket: / 127.0.0.1: 9080 / 8e090f0fa57366808be106e004800a0f / realmDoApp) sammen med brukernavnet og e-postadressen din. Du bør få den kjente visningen vi så i den siste opplæringen, bare denne gangen kobler vi oss til en sanntidspakke!

Gå videre og endre egenskapene dine der, og du bør se det som reflekteres i Dashboard, så vel som i appen din.

Konklusjon og neste trinn 

I denne opplæringen lærte du å utvide et Realm Mobile Database-drevet program, som allerede er veldig kraftig, med en back-end serverløsning. Alle med bare noen få linjer med kode. 

I tillegg til å laste ned og installere Realm Object Server forbedret vi vår enkle påminnelsesapp med følgende funksjoner:

  • en enkel godkjenningsmekanisme
  • real-time back-end synkronisering

Til slutt så vi hvordan du overvåker levende data gjennom dashbordet, så vel som gjennom den kjente Realm Object Browser.

Forutsetningen for plattformer som Realm Object Server er å ha utviklere fokus på deres klient-side kode og ikke bekymre seg om kompleksiteten ved å opprettholde en back-end server

Vi har akkurat riper overflaten i dette innlegget. Det er mye dokumentasjon og konsepter med Realm Object Server, inkludert å jobbe med funksjoner for å tillate serverløs logikkutløser. 

Sjekk tilbake her for flere innlegg på back-end-tjenester for mobilapputvikling.