Anmerkung
In diesem Artikel möchte ich meine allgemeinen Eindrücke von der Verwendung von BaaS - einer Lösung namens Parse für die Entwicklung des Backends einer Android-Anwendung - teilen und über alle "Fallstricke" sprechen, denen ich während der Entwicklungsphase begegnen musste. Zum ersten Mal wurde diese Plattform von meinen Arbeitskollegen als Junior beraten, und es gab nur ein kommerzielles Projekt hinter mir. Die Motivation für das Schreiben dieses Artikels waren die Nerven und die Zeit, die ich damit verbracht habe, nach kompatiblen Versionen von Bibliotheken zu suchen und über die seltsamen Entscheidungen der Plattformentwickler nachzudenken
, oder einfach, weil ich noch keine Artikel zu diesem Thema gefunden habe . Außerdem werde ich nichts darüber erzählen, was Parse ist und wie man es verbindet und konfiguriert, aber für alle Fälle werde ich alle notwendigen Links hinterlassen, wo Sie darüber lesen können.
Problem Nr. 1: Verwenden von Parse Server in Verbindung mit PostgreSQl
Die Verwendung dieser Konfiguration war auf die Tatsache zurückzuführen, dass der Server auf VDS-Hosting bereitgestellt wurde und die Verwendung der Remote-MLab-Datenbank unangemessen war, da Roskomnadzor zum Zeitpunkt der Entwicklung versuchte, Telegramm in Russland zu blockieren, und es Probleme mit der Verbindung ohne VPN gab. Es war keine Zeit, VPN unter Linux zu konfigurieren, und das Projekt war aktiv. Daher entschied ich mich, eine lokale Datenbank auf dem Server zu verwenden. Ich habe mich für PostgreSQL entschieden, weil ich gute Erfahrungen damit gemacht habe.
Life Hack Nummer 1: Damit die Datenbank fehlerfrei in Datentypen funktioniert, müssen Sie bei der Installation von Postgres Postgis installieren. Danach müssen Sie eine Datenbank erstellen und unmittelbar nach dem Erstellen alle Postgis-Erweiterungen verbinden. Hier erfahren Sie, wie Sie Postgis-Erweiterungen mit der Datenbank verbinden. Nachdem alle Erweiterungen verbunden wurden, können Sie die Datenbank mit dem Server verbinden, das Dashboard öffnen und sicherstellen, dass die Tabellen fehlerfrei erstellt werden.
Lifehack Nr. 2: Verwenden Sie die Version von Parse Server> = 2.7.2. Als ich das Testprojekt von gita heruntergeladen habe, gab es eine Serverversion 2.2.5, und alles schien zu funktionieren, aber später kam ein Fehler heraus: Während die Geolokalisierungskoordinaten beibehalten wurden, wechselten lat und lng die Orte. Und es gab zwei Fälle: Wenn die Koordinaten einen absoluten Wert <90 hatten, befand sich die Markierung auf der Karte nur an einer anderen Stelle, andernfalls stürzte die Anwendung ab, und das Protokoll, dass der Lat-Wert nicht mehr als 90 absolut sein sollte, fiel in die Konsole. Dann begann ich einen zweitägigen Trottel auf der Suche nach Lösungen. Was ich in verschiedenen Foren und in Github-Problemen einfach nicht gefunden habe: Koordinaten in der Cloud-Funktion spiegeln (funktioniert nicht!); Umdrehen der Koordinaten in PostgresStorageAdapter (nach den Änderungen gab es eine Reihe von Fehlern, ich wollte nicht in das Ende des Arbeitstages eintauchen, schaltete den Computer aus und ging). Am nächsten Tag habe ich mir die Releases angesehen und festgestellt, dass in Version 2.7.2 ein Fehler in PostgresStorageAdapter behoben wurde. Die Version in package.json wurde schnell repariert, und siehe da, es funktionierte wie es sollte. Zu diesem Zeitpunkt gab es bereits Version 3.x.x, und ich habe versucht, sie zu verwenden, aber die Entwickler haben viele Änderungen in Bezug auf die Cloud-Funktionen vorgenommen, und beim Start sind weitere Fehler aufgetreten. Es war keine Zeit, den Arbeitscode zu korrigieren, daher war Version 2.7.2 für mich richtig. Wenn Sie gerade Ihr Projekt gestartet haben, ist es natürlich besser, die neueste Version zu verwenden.
Problem Nr. 2: LiveQuery meldet sich nicht ab
Ich habe etwas mehr als einen Tag damit verbracht, dieses Problem zu lösen. Und sie war verdammt seltsam und nicht offensichtlich.
Anfangs war die Architektur ungefähr so:
public class Subclass extends ParseObject {
Und wenn Sie den Bildschirm verlassen, wurde die Methode aufgerufen, aber die Anforderung wurde nicht abgemeldet. Wie Sie wissen, abonniert LiveQuery auf Anfrage, und jede Änderung der Daten, die der Anfrage entsprechen, kann im Rückruf verfolgt werden. Das Abbestellen erfolgt ebenfalls auf Anfrage. Das Abonnentenobjekt wird in der Abonnementmethode zurückgegeben, aber dieses Objekt ist absolut nutzlos, da es nicht die Methode "Abbestellen" enthält und LiveQueryClient selbst nicht die Methode "Abbestellen" mit dem Parameter Abonnent enthält. Als ich das Debugging einschaltete, begann ich Schritt für Schritt mit der gleichen Methode wie "Abbestellen" fortzufahren. Der Client selbst speichert die Abonnementliste privat. Bei der Methode durchlaufen Entwickler dieses Blatt und vergleichen die Anforderung aus dem Parameter mit einer privaten Anforderung, die im Abonnementobjekt durch die undefinierte Funktion equals gespeichert wird, die dem üblichen == entspricht, und die Adressen komplexer Objekte vergleicht. Und das erklärte alles, denn in meinem Projekt gab es eine Klasse mit Funktionen, die die richtige Abfrage für mich erstellten. Und da das Anforderungsobjekt immer neu erstellt wurde, waren die Adressen der Anforderungen unterschiedlich, gleich funktionierte nicht und es kam nicht zum Abbestellen. Ich habe dieses Problem wie folgt gelöst: habe Singleton und es hat funktioniert.
Es sah ungefähr so aus:
public class Subclass extends ParseObject {
Nach einiger Zeit kam mir die Idee, einen eigenen Manager zu schreiben, der die Abonnements überwacht, aber das habe ich nie bemerkt.
Fazit
Ich hoffe dieser Artikel ist nützlich. Wenn Sie Ungenauigkeiten oder Fehler feststellen, schreiben Sie mir. Wie versprochen werde ich Links zu mehreren guten Quellen hinterlassen, die mir geholfen haben:
Viel Glück an alle!