Komma igång med Realm Mobile Platform för iOS

I den här handledningen fortsätter jag från min tidigare handledning på Realm Mobile Database för iOS där vi lärde oss om Realm Mobile Database, en databas som är alternativ på Core Data. Realm har också utvecklat en lika elegant och sömlös server-sida lösning som synkroniserar våra data mellan vår enhet och molnet i realtid. Detta är en del av Realms flaggskeppslösning, Realm Mobile Platform.

I det här inlägget kommer vi att installera en Realm Object Server och förbättra den RealmDo-app som vi startade i föregående inlägg.

Vad är Realm Mobile Platform?

Realm Mobile Platform 1.0 tillkännages i början av 2017 och representerar företagets ansträngningar att utöka sin databas på molnet och ge stöd för fler samarbetsfunktioner som live messaging, offline-första upplevelser och mer imponerande plattform. Genom den nya Realm Object Server tar Realm Mobile Platform över och hanterar komplexiteten i marshaling och synkronisering av data mellan Realm Database och server. 

Realm Mobile Platform fungerar som en kanal mellan Realm Object Server och din Realm Mobile Database. När du fortsätter data lokalt på din enhet, blir det skjutit i realtid, men med möjlighet att köa och skjuta upp synkroniseringen när du är offline.

Förutom att synkronisera data (eller Realms) mellan enheter, tillhandahåller Realm Object Server också autentiserings- och åtkomstkontrolltjänster (behörighetshantering), liksom serverlös händelsebehandling genom Realm-funktioner. Låt oss lära oss mer om vad Realm Mobile Platform ger. Observera att vissa av dessa funktioner endast är tillgängliga för företagskunder.

Realm Funktioner 

Realm Funktioner fungerar som app logik lager, drivs av JavaScript, så att du kan utföra anpassad logik utan en dedikerad server och att svara på ändringar på en eller alla Realms (databaser).

Genom Realm Dashboard kan du författare, starta, stoppa och ta bort funktioner som svarar på ändringar i en eller flera Realms, med serverlös händelsehantering. Du skapar funktioner som använder JavaScript och Node.js, och funktionerna kallas av Realm Object Server globalt lyssnande API.

För närvarande är utvecklarutgåvan av Realm Mobile Platform begränsad till tre aktiva funktioner vid vilken tidpunkt som helst, även om du kan få fler funktioner som är inaktiva. 

Realm-funktioner ligger utanför ramen för denna handledning, men det är verkligen värt att läsa på.

Realm Dashboard

Realm Dashboard kommer bakas in med Realm Object Server-installationen, som vi kommer att illustrera inom kort, vilket ger ett bekvämt verktyg för att hantera dina Realms, hantera användare och funktioner och få en puls på hur din applikationsserver körs.

Den webbläsarbaserade instrumentpanelen består av följande avsnitt:

  • instrumentbräda ger en realtidspuls av datarate in och ut, öppna anslutningar och öppna Realms.
  • Realms ger vägar, behörigheter och ägare till var och en av Realms, och du kan krypa ner varje Realm för att visa modeller och innehåll i enskilda Realms.
  • användare tillhandahåller information och hanteringstjänster för alla användare, inklusive beviljande och borttagning av administrativa behörigheter.
  • funktioner är där du skapar och hanterar dina Realm-funktioner.
  • loggar är där du kan visa Systemloggar för Object Server.

Dashboardet är normalt tillgängligt via http: // localhost: 9080-sökvägen lokalt, eller var du än befinner dig. 

Realm-anslutning

Det här är en funktion som är enbart för företag, men är mycket användbar för vissa företag. Realm-anslutning är en ledning som exponerar företags äldre system till plattformen genom en modern API-gateway, vilket gör det lättare för utvecklare att ansluta sig till tidigare obfuscated datakällor.

Enterprise Edition av Realm Object Server erbjuder ett Node.js-baserat adapter API som låter dig komma åt alla operationer och data på objektnivå på låg nivå. Detta kan användas för att låta en synkroniserad Realm interagera med en befintlig äldre databas som PostgreSQL: Realm kommer också att hållas synkroniserad med den externa databasen i realtid. Klientprogram kan använda Realm Mobile Database API och få fördelarna med att arbeta med realtid, inhemska objekt.

Service Tiers

Företaget erbjuder för närvarande tre nivåer av service. De Utvecklarutgåva är fritt nivå för små grupper där användare skulle dra nytta av funktioner som realtid automatisk datasynkronisering med hjälp av levande objekt. De Professional Edition lägger till avancerade funktioner som händelsehantering och åtkomst till serverns sida.

Catering till kraven på medelstora lag, Professional Edition är en bra mellanslag utan överhuvudet av Enterprise Edition. Kostnaderna anpassas till din skala, vilket ger en enkel migreringsväg från den fria nivån.

Professionell utgåva börjar på $ 1 500 per månad, och Enterprise Edition är anpassad pris baserat på användarväsen.

Din First Realm Server App

Förutsatt kunskap

Denna handledning förutsätter att du har en fungerande kunskap om Swift, men ingen kärndata eller tidigare databaskunskaper behövs. Dessutom antas det att du har gått igenom den tidigare handledningen på Realm Mobile Database för iOS och har slutfört övningsövningarna för att skapa RealmDo-appen. Vi fortsätter från var vi slutade i det inlägget och lägger till serverfunktion i vår app, RealmDo.

Förutom Realm använder vi följande delar av iOS:

  • UIKit: Att visa våra data visuellt
  • CocoaPods: ett tredjepartsberoende bibliotek som används för att installera Realm Mobile Database

Målen för denna handledning 

I slutet av denna handledning har du fortsatt bygga vidare på din kunskap om Realm och förbättra den enkla att göra-appen som skrivs i Swift, genom att hålla data kvar på servern via Realm Mobile Platform. Du kommer att kunna skapa en fullt fungerande Realm-powered task-app med ett back-end på serverns sida och längs vägen lär du dig följande begrepp:

  1. konfigurera Realm Object Server lokalt
  2. synkronisera modellen "live-object" till Realm Object Server
  3. övervakning av data via instrumentbrädan

Du kan ladda ner hela källkoden från handledning GitHub repo.

Ställ in Realm Object Server

Innan vi träffar Xcode igen för att arbeta med vårt projekt, måste vi konfigurera och få vår Realm Object Server att köras. 

Ladda ner macOS-buntet, förutsatt att du kommer att installera objektservern lokalt på din Mac. Om du ska installera den på en Linux-server, se dokumentationen för Realm.

När du har slutförd nedladdningen, navigera i terminalen till din Nedladdningar / sfären-mobile-plattform mapp och starta servern genom att skriva:

start-object-server.command

Din terminal ska nu indikera att din server startar och din webbläsare öppnas automatiskt för att starta Realm Dashboard på http: // localhost: 9080.

Du kommer att bli ombedd att registrera dig som ny användare och ge ett e-post och lösenord första gången du kör servern. Vänligen fortsätt och slutför registreringsprocessen och kom ihåg dina uppgifter, eftersom du kommer att använda dem senare.

Håll det här webbläsarfönstret öppet eftersom vi kommer tillbaka till det senare när vi kör vår fullständiga app för att observera hur data lagras på servern.

Gör vårt projekt synkroniserbart

Nu ska vi börja kodning, så fortsätt och skjut upp Xcode-projektet som vi arbetade med i den tidigare handledningen, eftersom vi kommer att fortsätta bygga därifrån i visningsregulatorn.

Det första vi ska göra är att ändra vår remindersList globala variabeln vara mutable, så vi måste ändra den från en RLMResults motsätta sig a Lista typ. Vi lägger också till en ny objekttyp, NotificationToken, som vi kommer att använda för att meddela oss om när det finns en förändring i riksdataobjektet. 

NotificationToken är inte ett serverns specifikt objekt, och vi kunde ha använt det i vår tidigare handledning, men det kommer säkert att vara användbart när vi vill upptäcka realtidsändringar på distans eller lokalt och reagera i enlighet därmed.

var notificationToken: Meddelande? var påminnelserLista = Lista()

Inom viewDidLoad () metod, vi kommer att bädda in en SyncUser.logIn () metod, som är Realms autentiseringsmekanism, accepterar ett användarnamn, lösenord och serverplats. Detta är ett intressant ämne i sig, utöver omfattningen av denna handledning, men för nu kommer vi bara att ha hårddisk i de referenser vi ställde när vi registrerade vår Realm Object Server tidigare.

Vi passerar också i serverns plats tillsammans med namnet på den rike (databas) vi vill använda, vilket är http://127.0.0.1:9080. I riksgränssnittet, förutom serverns plats, måste du också ange riksnamnet, vilket är realmDoApp för denna demonstrationens syften. Fortsätt och ersätt din viewDidLoad () med följande:

överrätta func viewDidLoad () super.viewDidLoad () tableView.register (UITableViewCell.self, forCellReuseIdentifier: "cell") // Du bör göra användarnamnet och lösenordet användarinmatning som stöds SyncUser.logIn (med: .användarnamnPassword (användarnamn: " [email protected] ", lösenord:" test123 ", register: false), server: URL (sträng:" http://127.0.0.1:9080 ")!) användare, fel i vakt låt användaren = användaren annat  fatalError (String (beskriver: fel)) DispatchQueue.main.async (execute: // Open Realm låt konfiguration = Realm.Configuration (syncConfiguration: SyncConfiguration (användare: användare, realmURL: URL (sträng: "realm: //127.0 .0.1: 9080 / ~ / realmDoApp ")!)) Self.realm = försök! Realm (konfiguration: konfiguration) // Ange realm meddelande block self.notificationToken = self.realm.addNotificationBlock _ in self.updateRemindersList () själv .updateRemindersList ())

I en verklig applikation skulle vi få användaruppgifter med ett formulär. I koden ovan, skar vi dock våra koduppgifter och anger ett användarobjekt när inloggningen är framgångsrik. Annars kommer applikationen att misslyckas med ett dödligt fel.

Slutligen använder koden ovan ett synkron block för att associera realm-instansen till realm-objektservern (istället för databasen på enheten). Det här är den distinkt linje som gör att den här appen är molnbaserad. 

I slutet initierar jag notificationToken att ringa en metod, updateRemindersList (), varje gång det finns en förändring i riksdata (lokalt eller på distans).

func updateRemindersList () om self.remindersList.realm == nil self.remindersList = self.realm.objects (Reminder.self) .reduce (List()) (lista, element) -> Lista i list.append (element) returlista self.tableView.reloadData () 

Kodblocket ovan konverterar också self.realm.objects () den tar emot från servern så att vi kan associera resultaten med vår nya Lista-maskinskrivna RemindersList uppsättning objekt.

Lägg märke till hur det är tvetydigt om vi får data från vår rike databas eller på distans. Det här gör Realm bra - du behöver inte oroa dig för synkronisering lokalt eller på distans!

Och det är det - all kod som behövs för att appen ska fungera med Realm Object Server. Det finns en sista sak som behövs innan du bygger och kör appen. Öppna projektet Info.plist som Källkod genom att högerklicka på filen. Lägg till följande för att tillåta icke-TLS-förfrågningar på jobbet. 

NSAppTransportSecurity  NSAllowsArbitraryLoads   

Nu fortsätt och bygg och kör sedan programmet, och lägg till några nya påminnelser. Vi kommer att byta till webbläsaren nu, där vi kan se den löpande servern och få åtkomst till dess instrumentpanel för att observera att data fylls i ett nytt rike.

Övervakning av data via Dashboard

Nu ska vi övervaka och övervaka data via instrumentbrädan som vi lanserade när vi startade Realm Object Server. När du kör appen och instrumentbrädan sida vid sida kan du se att när du lägger till ett objekt visas det omedelbart upp på instrumentbrädan. Samma händer när du tar bort ett objekt, vilket visar att det verkligen är realtid.

Övervakning av data via Realm Browser

Du kan också använda Realm Browser för att övervaka dina appdata. I den tidigare handledningen använde vi Realm Browser för att se våra data på enheten. Vi kan också använda den för att visa Realm Object Server-data. 

Starta appen, välj Öppna synkroniseringsadressen, och skriv in platsen för din fjärrobjektserverns rike (t.ex.. riket: //127.0.0.1: 9080 / 8e090f0fa57366808be106e004800a0f / realmDoApp) tillsammans med ditt användarnamn och e-postadress. Du borde få den välbekanta vyn vi såg i den sista handledningen, bara den här gången kopplas vi till en realtids backend!

Gå vidare och ändra dina egenskaper där, och du bör se det som återspeglas i instrumentpanelen såväl som i din app.

Slutsats & Nästa steg 

I den här handledningen lärde du dig att förlänga en applikation med Realm Mobile Database-driven, vilket är mycket kraftfullt redan med en back-end-serverlösning. Alla med bara några rader av kod. 

Förutom att ladda ner och installera Realm Object Server förbättrade vi vår enkla program för påminnelser med följande funktioner:

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

Slutligen såg vi hur man övervakar levande data via instrumentbrädan, liksom genom den välbekanta Realm Object Browser.

Förutsättningen för plattformar som Realm Object Server är att utvecklarna fokuserar på deras klientsidkod och inte oroar sig för komplexiteten att upprätthålla en back-end-server

Vi har precis repat ytan i det här inlägget. Det finns mycket dokumentation och koncept med Realm Object Server, inklusive att arbeta med funktioner för att möjliggöra serverlös logisk utlösning. 

Kolla tillbaka här för fler inlägg på back-end-tjänster för utveckling av mobilapp.