Pascal P.
Hey Pascal,
danke für deine ganzen Tipps. Bin erst jetzt dazu gekommen alles mal gründlich durchzuschauen und zu durchdenken.
Wieso kannst du das nicht korrekt abfangen?
Hier mal genau die Probleme die ich haben.
Problem 1 (Upload und Download)
Der Upload wird angestoßen und es passiert etwas. Beispiele: Internet weg, App wird vom User gekillt, App wird von Android gekillt weil sie bei z.B. zu langsamen Internet zu lange im Hintergrund liegt etc… Bei native Android Apps gibt’s dafür ja fertige Lösungen die all diese Dinge überwachen und komfortabel lösen. Aber eben leider wohl nicht für meine Variante.
Problem 2 (Die Synchronisierung / Umgang mit den Versionen)
Wie beschrieben arbeite ich mit Zeitstempeln und den Infos, die ich lokal sammeln (was wurde gelöscht, verändert etc...) um, wenn Internet da, zu prüfen was mit den Files passieren soll. Dabei gibt es diverse Fallstricke, die ich hier kurz mal in zwei Beispielen anschneiden möchte.
1: User hat ein Projekt bei Dropbox liegen und arbeitet an dem gleichen Projekt, ohne Internet, an seinem Handy. Etwas später öffnet er das gleiche Projekt auf seinem Notebook und ändert dort etwas. Das Notebook hat Netz und sendet die Version an Dropbox. Dann hat sein Handy wieder Internet und nun kommt es ja zu einem Konflikt. Die Version auf Dropbox Seite ist ja nun neuer und würde somit eigentlich die Handy Seite überschreiben. Das wäre natürlich doof und lässt sich ja durch uns nicht so wirklich abfangen.
2: User löscht ein Projekt auf seinem Handy, ohne Internet. Dann merke ich mir zwar, dass und wann das Projekt gelöscht wurde aber wenn der User nun auf dem Notebook an dem gleichen Projekt, das ja wegen fehlendem Netz noch nicht gelöscht wurde, arbeitet und dieses hochgeladen wird so muss ich ja nun entscheiden, was mache ich mit dem gelöschten Projekt auf dem Handy? Da die Dropbox Version ja neuer als die Löschung ist. Also wieder runterladen oder nicht etc…
Unterm Strich brauche ich eine gescheite Logik, die mit all diesen Dingen gescheit umgeht. Ich kann mir beim besten Willen nicht vorstellen, dass kleine Entwickler sowas einfach selbst schreiben, da es ja so viele Eventualitäten in diesem Zusammenhang geben kann.
DIE LÖSUNG WÄRE
Das beste und sauberste wäre sowas wie pouchDB, nur mit Dropbox und/oder Drive als Backend.
(Hier war der Link von dir zu carlserver, darf ich als Neuer nicht posten)
Im on Error solltest du doch alle Errors bekommen oder?
So mache ich es ja gerade aber er kümmert sich in seinem Beispiel ja auch nicht um die oben angesprochenen Punkte.
Ansonsten bleibt dir immernoch die Daten auf dem Gerät zu exporiteren z.b. im ein Zip und dieses den User übertragen lassen bzw. wirklich nur auf knopfdruck zu synchronisieren.
In die Richtung hab ich auch schon überlegt. Aber ein Projekt mit ein paar Bildern Drin, kann schon mal etwas größer werden. Das geht dann natürlich gut auf den Upload. Ich bin mir nicht sicher auf welche Akzeptanz so eine Lösung treffen würde. Zudem wird damit ja auch Problem 1 (siehe oben) nicht gelöst.
Oder du übernimmst das speichern serverseitig, dann hat halt nicht jeder User seine Daten bei sich.
Hier scheue ich etwas die Kosten und das ich mich ggf. um den Server kümmern muss. Weil gerade wenn persönliche Daten von Usern im Spiel sind könnte es ja auch rechtliche so eine Sache werden oder?
Wie würdest du denn sowas am ehesten angehen? Über sowas wie Firebase gibts ja gute Ansätze, wobei ich mir nicht sicher bin ob das mit Cordova läuft. Und wenn es ein paar mehr Daten sind, kostet das ja schon etwas an Geld. Und eigener Server, muss ja auch abgesichert etc... werden.
Ach alles schwierig...
Wie gesagt, am besten wäre sowas wie pouchDB, nur mit Dropbox und/oder Drive als Backend. Gibts denn sowas nicht?
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.