Wenn User offline, auf Offline-Seite weiterleiten, Daten speichern und (wenn User wieder Online) wieder an Online-Seite übergeben

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Aaron3219

Aktives Mitglied
6 Oktober 2015
890
180
43
17
#1
Hallo liebes Forum,

mal eine (evtl.) komplexere und eventuell unmögliche Aufgabe:
Ich stelle mir gerade die Frage, die schon im absolut überlangen Titel steht:
Mal angenommen, ich habe eine WebView-APK und die APK erkennt, dass der User offline ist.
Ich weiß, dass man dann auf eine offline-Seite weiterleiten kann.
Ist es möglich, die dort gespeicherten Daten wieder an die Datenbank der Online-Seite weiterzugeben?

Beispiel:
Der User geht offline und wird auf die entsprechende Seite weitergeleitet.
Dort schickt er ein Form ab, dass in Form eines Arrays gespeichert wird.
Ist der User wieder online, wird das Array an die Seite geschickt.

Sollte es auf diesem Wege nicht gehen, gibt es doch bestimmt irgendwelche workarounds oder nicht?
Es muss auch nicht unbedingt mit webview einer apk sein. Es kann auch im Browser sein.



Es müsste doch auch möglich sein, ohne eine offline-Website, sich als APK mit der Database zu verbinden (also ohne Offline-WebView-Seite).
Dort könnte ich ein Form generieren, dass dann in die Datenbanken der Online-Website eingetragen wird.

Ich bin offen für Vorschläge.
 
18 Dezember 2017
73
3
8
#2
Ich hab sowas in der Art mal gemacht (fast genau das Selbe). Ich komme aber heute leider sehr spät heim, weswegen ich es erst morgen posten könnte, falls das Thema bis dahin nicht schon erledigt ist.
Grüße,
Felixprogram
 

Aaron3219

Aktives Mitglied
6 Oktober 2015
890
180
43
17
#4
Sind denn so Giganten wie Firebase und so was geeignet?
Zumindest, wenn man mal die Kosten außer Acht lässt?

Ich rede von durchaus 10 Millionen Einträgen und mehr.
Können die mit sowas umgehen?
Es kann auch sein, dass mal 100.000 Einträge importiert werden müssen.
MySQL passt natürlich ganz gut, weil es eben um Tabellen geht.
Andererseits ist z.B. Firebase (ich rede übrigens vom Cloud Firestore-System) einfach zu benutzen und dazu auch noch pures JS.

Oder gibt es einen Weg, eine pwa mit MySQL (Stichwort: IndexedDB) zu bauen, der genauso einfach ist, wie mit der JS-Variante?

Ein Nachteil hat Firebase nämlich schon mal sicher:
Mit Arrays muss man aufpassen und Dinge wie Auto-increment gehen auch nicht ohne Weiteres (Stichwort Push IDs).

Edit:
Denn laut Google
https://firebase.google.com/docs/firestore/quotas
gibt es da schon ein paar Limitationen, die sich nicht alle umgehen lassen.
 
Zuletzt bearbeitet:

Tronjer

Moderator
Team
Moderator
8 Oktober 2010
5.020
411
83
Berlin
#5
Frontend und Backend sind völlig unabhängig voneinander und werden über eine API connected. BaaS Provider wie Firebase haben den Vorteil, dass sie die API mitliefern.

Für dein Vorhanden solltest du erstmal das Frontend mit dem Framework deiner Wahl (Angular, React, Vue, etc.) bauen.
 

Aaron3219

Aktives Mitglied
6 Oktober 2015
890
180
43
17
#6
Das Front-End steht schon.
Ich arbeite schon seit einiger Weile an dem Projekt.

Ich habe den Artikel auf Google Dev gefunden:
https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa

Im glaube ich beginne es richtig zu verstehen.
Im Prinzip brauche ich gar kein BaaS Provider.
Firebase liefert also schon die API, ich kann aber auch selber eine Integrieren, wie z.B. IndexedDB, die ich wahrscheinlich auch verwenden werde.
Diese APIs speichern die Internetseite auf dem client-side Storage oder DOM-Storage und geben diesen dann aus.

Aber es gibt doch auch für den Storage Begrenzungen.
Was passiert, wenn dieser Storage voll ist?
In dem Artikel steht dazu was, doch was ich hätte da doch noch die ein oder andere Frage.
 
Zuletzt bearbeitet:

Aaron3219

Aktives Mitglied
6 Oktober 2015
890
180
43
17
#7
Ich hab mich jetzt außerdem eine ganze Weile mit indexedDB beschäftigt und habe trotzdem noch Fragen:
So wie ich das verstanden habe, muss ich bei indexedDB eine Datenbank erstellen, sofern sie nicht schon existiert.
In diese Datenbank kann ich natürlich Einträge machen. Wenn ich also die Internetseite aufrufe und dann ein Form abschicke,
kann ich die Daten darin speichern und, sobald ich wieder Online bin, benutzen um sonst was damit zu machen.

Aber die Seite an sich kann ich doch auch irgendwie speichern, sowie
https://www.pokedex.org/

Man geht auf die Seite und wenn man dann mal den Flugmodus anschaltet, funktioniert sie trotzdem einwandfrei.
Müsste ich dann etwa den HTML-Code, den ich darstellen will ebenfalls in einer IndexedDB speichern?
Das scheint mir nämlich irgendwie nicht richtig. Und entweder verwende ich die falschen Suchbegriffe, aber im Internet finde ich immer nur Guides dazu, wie man zwar Einträge in die DB macht, aber wie ich eine komplette Seite speichern kann, bleibt mir ein Rätsel.

Edit:
Folgender Plan:
Ich benutze das manifest-Attribut, um meine Seite im Cache zu speichern.
Meine Seite sollte dann offline vollständig geladen werden. Schickt der User ein Form ab, wird es mit IndexedDB gespeichert und, sobald der User Internet hat, aus der IndexedDB geladen und verarbeitet.
Ist das best-practice?

Meine vorherigen Fragen hätten sich damit erledigt, doch eine Frage hab ich noch (sofern mein Weg best practice ist):
Wie krieg ich es hin, eine MySQL-Datenbank offline abzurufen?
 
Zuletzt bearbeitet:

Aaron3219

Aktives Mitglied
6 Oktober 2015
890
180
43
17
#8
Ich verweise nochmal aufs Edit. Ich weiß ja, wenn man sich den Beitrag schon durchgelesen hat und das Edit spät kommt, liest man es meistens nicht:

Folgender Plan:
Ich benutze das manifest-Attribut, um meine Seite im Cache zu speichern.
Meine Seite sollte dann offline vollständig geladen werden. Schickt der User ein Form ab, wird es mit IndexedDB gespeichert und, sobald der User Internet hat, aus der IndexedDB geladen und verarbeitet.
Ist das best-practice?

Meine vorherigen Fragen hätten sich damit erledigt, doch eine Frage hab ich noch (sofern mein Weg best practice ist):
Wie krieg ich es hin, eine MySQL-Datenbank offline abzurufen?
 

scbawik

Senior HTML'ler
14 Juli 2011
2.463
429
83
#9
Wie krieg ich es hin, eine MySQL-Datenbank offline abzurufen?
Du hast es noch nicht ganz verstanden.

Client und Server sind als komplett eigenständige Anwendungen zu betrachten.
Die haben jeweils ihren eigenen "Store" in dem sie Daten speichern, und eine API um Daten auszutauschen.

Der Client verwendet als Datenbank entweder localStorage oder indexedDB - der Server hingegen MySQL, MongoDB,...

Deine Aufgabe wäre es nun, die Daten vom Server - über die API - in den Store deines Clients zu bringen. Und umgekehrt ebenso:
Code:
IndexedDB <-> Client <-> [Internet] <-> Server <-> MySQL
Wie du siehst, ohne Internet ist der Weg zwischen Client und Server bzw. IndexedDB und MySQL nicht möglich.
IndexedDB und Client können aber weiterhin kommunizieren, Server und MySQL genauso.
 

Aaron3219

Aktives Mitglied
6 Oktober 2015
890
180
43
17
#10
Doch ich hatte es schon richtig verstanden.
Aber man muss tatsächlich eine Menge Fantasie aufbringen, um die Indirekte Frage zu verstehen.

Die Frage hätte lauten müssen:
Wie kriege ich die MySQL-Datenbank in die IndexedDB des Clients?
Bzw. eigentlich:
Was ist der beste Weg dafür?

Die Frage hast du ja schon beantwortet.
Aber ist IndexedDB dafür ausgelegt?
Wie gesagt, es können mehrere Millionen Einträge sein.
Ich weiß, dass IndexedDB für große Datenmengen ausgelegt ist, aber so große Datensätze??
 

Tronjer

Moderator
Team
Moderator
8 Oktober 2010
5.020
411
83
Berlin
#11
Bei IndexedDB geht es nicht darum, eine komplette Datenbank im Browser zu speichern, sondern zu antizipieren, welche Daten der User anfordern könnte, während er keine Verbindung zum Netz hat. Das könnten z.B. die nächsten Songs aus einer Playlist sein, die er in der U-Bahn abspielen will.

Ich würde an deiner Stelle das MySQL zu NoSQL (Mongo) migrieren. Und wie immer gibt es auch zu IndexedDB Tutorials, die man am Anfang durcharbeiten sollte.