Verbinden Sie ein mobiles Gerät mit der Datenbank, ohne Servercode zu schreiben

Hallo Habr! Ich möchte meine Erfahrungen mit der mobilen Foresight-Plattform teilen.

Wenn Sie die Aufgabe haben, Daten remote zu speichern, ohne Ihren eigenen Server zu schreiben, fällt Ihnen als Erstes das Firebase Realtime Database- Tool ein. Die meisten Leser wissen, worum es geht, aber im Übrigen werde ich es erklären. Mit Firebase Database können Sie Daten remote in NoSql-Form speichern.


Bild von der Feuerbasis


Aus den Vorteilen der Verwendung:

  • unterstützt von Google
  • Auf der Basisseite muss kein Code geschrieben werden
  • schnelle Arbeit
  • kostenlos bis zu 5 GB
  • Integration in den Firebase-Authentifizierungsdienst mit einer relativ großen Anzahl von Autorisierungsanbietern
  • Unterstützung für Android, iOS, Unity usw.
  • In Echtzeit synchronisiert: Wenn Daten in der Datenbank aktualisiert werden, werden sie im Client aktualisiert

Von den Minuspunkten:

  • Wenn Sie die festgelegten Grenzwerte für Speicherplatz und Serverlast überschreiten, müssen Sie bezahlen
  • Es gibt keine Möglichkeit, die Speicherstruktur anzupassen

FMP + PostgreSQL


Jetzt möchte ich Ihnen ein alternatives Tool vorstellen, das ich verwenden muss.

Ich werde von weitem gehen. Irgendwo habe ich einen erhöhten PostreSQL-Server mit einer Datenbank. In der Datenbank habe ich eine Tabelle mit Früchten:



Was ist PostreSQL, wie man damit arbeitet? Lesen Sie hier .

Meine Aufgabe ist es, diese Tabelle so schnell wie möglich mit möglichst wenig Code zu erreichen und die Sicherheit in jeder Phase zu gewährleisten.

Hier ist die Tabelle my_table_fruits in pgAdmin4 :



Als nächstes finde ich die Prozeduren im pgAdmin4-Baum. Ich schreibe mein eigenes Verfahren, um den Tisch zu bekommen:



Die Prozedur heißt obst_get_by_color und gibt mir Früchte einer bestimmten Farbe aus meiner Tabelle my_table_fruits.

Danach wechsle ich zum Foresight-Server der mobilen Plattform (im Folgenden FMF). Wie Sie die Plattform bereitstellen und was Sie benötigen, finden Sie in der Dokumentation . FMF ist ein Server mit Konnektoren zu Datenbankservern. Es kann auch eine Verbindung zu dem von uns benötigten PostgreSQL herstellen. Hierfür muss kein Code geschrieben werden. Ich muss mit dem Admin-Panel über den Browser arbeiten. Geben Sie die erforderlichen Adressen von Servern und Datenbanken ein. Das Admin-Panel verfügt über Einstellungen und einen Umgebungsbaum:



Weitere Informationen zu den Einstellungen finden Sie in der Dokumentation.

Leider hat die FMF keine Testversionen oder freien Zeiträume. Außerdem wird der FMF in einer sicheren Infrastruktur des Kunden bereitgestellt. Daher kann ich keine Links zum Server bereitstellen, um dies zu versuchen. Um das Wesentliche der Arbeit zu verstehen, reichen die folgenden Informationen jedoch völlig aus.

Ich erstelle eine neue Umgebung im Umgebungsbaum, zum Beispiel werde ich sie Leonid_environment nennen. Innerhalb der Umgebung erstelle ich ein Projekt, zum Beispiel Leonid_project. Ich gehe in das Projekt und erstelle dort eine Datenquelle, in unserem Fall PostgreSQL. Ich gebe die Server- und Datenbankparameter ein, in denen meine Tabelle gespeichert ist:



Ich gehe in die Datenquelle und klicke auf "Importieren". Ich gebe im Namen der Quelle den Namen der Prozedur ein, die ich in PostgreSQL eingeführt habe, in diesem Fall obst_get_by_color. Für den mobilen Client können Sie sich einen anderen Namen einfallen lassen, allerdings nicht unbedingt. Ich werde es Früchte_get_by_color_for_android nennen:



Nach dem Klicken auf die Schaltfläche "Importieren" sieht die FMF-Plattform unsere Vorgehensweise und die Parameter, die wir dort übertragen müssen.



Insbesondere wird sie sehen, dass wir den Parameterruit_color übergeben müssen:



Wechseln Sie danach zur Registerkarte "API-Benutzer" und erstellen Sie einen Benutzer. Erstellt einen Benutzer mit einem Leonid-Benutzernamen und einem Passwort 123123:



Ab diesem Moment können Sie zu Android Studio gehen, um diese Daten auf Ihrem Mobiltelefon abzurufen.

Fmp + Android


Ich erstelle ein neues Projekt. Zusammen mit der Plattform wird ein Framework für die Arbeit damit verteilt. Ziehen Sie das Framework in das Projekt Datei → Importmodul → * .aar



Im Projekt deklariere ich eine Reihe von Konstanten, in die ich die Serveradresse einfüge, sowie den Namen der von mir erfundenen Umgebung, den Namen des Projekts, die Anmeldung, das Kennwort und den Ressourcennamen aus dem FMP:

private static final String MY_URL = "http://mobilefmp.dev.fs.world"; private static final VersionAPI MY_VERSION_API = VersionAPI.V_1; private static final String MY_ENVIRONMENT = "Leonid_environment"; private static final String MY_PROJECT = "Leonid_project"; private static final String MY_VERSION = "v1"; private static final String MY_LOGIN = "Leonid"; private static final String MY_PASSWORD = "123123"; private static final String MY_RESOURCE = "fruits_get_by_color_for_android"; 

Bitte beachten Sie, dass wir uns speziell auf das FMP beziehen und nicht direkt auf PostgreSQL. Erstellen Sie als Nächstes ein HyperHive-Objekt und füllen Sie die deklarierten Variablen aus:

 hyperHive = new HyperHiveState(getApplicationContext()) .setHostWithSchema(MY_URL) .setApiVersion(MY_VERSION_API) .setEnvironmentSlug(MY_ENVIRONMENT) .setProjectSlug(MY_PROJECT) .setVersionProject(MY_VERSION) .buildHyperHive(); 

Dann müssen Sie eine Autorisierung durchführen. Übergeben Sie dazu den Benutzernamen und das Kennwort an die auth () -Methode:

 boolean status = hyperHive.authAPI.auth(MY_LOGIN, MY_PASSWORD, true).execute().isOk(); 

Wenn true, können Sie den Inhalt der Tabelle abfragen, was wir tun werden. Im tableStreamCallParams-Objekt übergeben wir den Parameterruit_color in Form von json und geben den gelben Wert dafür ein. Ich möchte Sie daran erinnern, dass wir in PostreSQL eine Obsttabelle und eine Prozedur erstellt haben, die einen Farbparameter als Eingabe verwendet. Dies war notwendig, um diesen Parameter auf dem Gerät einzugeben:

  TableStreamCallParams tableStreamCallParams = new TableStreamCallParams(); String data = "{\"fruit_color\": \"yellow\"}"; tableStreamCallParams.setData(data); String status = hyperHive.requestAPI.tableStream(MY_RESOURCE, tableStreamCallParams).execute(); 

Nach der Anfrage wenden wir uns an den FMP-Server. Der FMP-Server greift auf den PostgreSQL-Server zu. Als Ergebnis sollten wir eine Liste der gelben Früchte erhalten:



Strings werden in die SQLite-Datenbank gestreamt. In diesem Fall waren die Farben Gelb nur Banane und Zitrone. Die Download-Geschwindigkeit von zwischengespeicherten Daten auf der FMF-Seite beträgt bei normaler Internetgeschwindigkeit ungefähr 10.000 Zeilen pro Sekunde.

Alle von mir beschriebenen Schritte können in der Dokumentation gelesen werden. Außerdem gibt es Informationen zum Herstellen einer Verbindung zu iOs und anderen Betriebssystemen.

Ich gebe den vollständigen Aktivierungscode .

Ich habe eine Anfrage vom Hauptthread gestellt und keine Fehler verarbeitet, um die Codemenge zu reduzieren.

Funktionelles FMP


Die FMF-Funktionalität ist nicht darauf beschränkt. Sie können auf der Serverseite der Datenbank eine Prozedur nicht nur zum Empfangen, sondern auch zum Erstellen neuer Zeilen in Abhängigkeit von den übergebenen Werten erstellen. Sie können Arrays von Werten übergeben. Einschränkungen liegen nur in der Datenbank selbst vor.

Ich werde in der Hauptfunktionalität des FMP breite Schritte durchlaufen:

  • Zwischenspeichern von Daten auf der Plattformseite und Empfangen eines Deltas (nicht die gesamte Tabelle, sondern nur geänderte Zeilen)
  • Benutzeraktionen protokollieren
  • Zugriffskontrolle nach Benutzer, Benutzergruppe, Geräte-ID
  • Authentifizierung über LDAP
  • Integration mit SMTP, Citrix XenMobile, Sentry
  • Datensignatur in der CryptoPro-Zertifizierungsstelle
  • Dateispeicherung ist nicht die Seite des FMF
  • lokale Datenbank auf der FMP-Seite (Sie können keine Verbindung zu einer Datenbank eines Drittanbieters herstellen, sondern eine lokale Datenbank wie in Firebase erstellen)
  • Konnektoren für Firebase Cloud Messaging, Apple Push Notification und Windows Push Notification. Erstellen Sie Mailinglisten und Push-Benachrichtigungsvorlagen

Es gibt Rahmenbedingungen für:

  • android
  • ios
  • UWP
  • WinCE
  • Segelfisch, Aurora (russischer Segelfisch)

Es gibt Anschlüsse für:


Vor- und Nachteile von FMP


Ich werde die Vor- und Nachteile geben, die ich aus meiner Sicht sehe. Abhängig von den Besonderheiten und der Größe des Projekts werden Sie wahrscheinlich nicht mit allem einverstanden sein.

Vorteile:

  • Ohne Servercode zu schreiben, können Sie eine Verbindung zum Datenbankserver herstellen
  • eine große Anzahl von Anschlüssen an andere Quellen
  • das Vorhandensein von Frameworks für die meisten mobilen Betriebssysteme
  • Russischsprachiger Support-Service

Nachteile:

  • Kosten
  • kommerzielle Kundenorientierung
  • Keine kostenlose Testversion oder Periode

Schlussfolgerungen


Der Vergleich der FMF-Plattform mit der Firebase-Echtzeitdatenbank war "weit hergeholt" Ich wollte zumindest etwas mit den bekannten Android- und iOS-Entwicklern vergleichen. Tatsächlich hat der PMF eine etwas andere Funktionalität und einen anderen Zweck. Zu den Wettbewerbern zählen SAP Mobile Platform, die erste mobile Plattform von IBM, Optimum CDC.

Abschließend möchte ich sagen, dass es sich lohnt, auf die FMF zu achten, wenn Sie:

  • ziemlich großer Kunde, der bereit ist, für das System zu bezahlen
  • Wer möchte nicht eine Schicht zwischen dem mobilen Gerät und dem Datenbankserver schreiben
  • Das hat eine große Datenmenge, wie zum Beispiel ein Warenlager
  • für die der Einsatz russischer Software von grundlegender Bedeutung ist
  • für die der Datenschutz eine wichtige Rolle spielt

Source: https://habr.com/ru/post/de463437/


All Articles