Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
GET-Requests sollten doch auch funktionieren, solange man HTTPS-Protokolle benutzt.Das funktioniert aber mit POST-Requests nicht.
Der Service Woker Cache kann doch von jedem eingesehen werden. Dann könnte man ja theoretisch einfach Hashes mit Rainbow-Tables abgleichen.
Was passiert außerdem, wenn man z.B. 10.000 Nutzer hat? Funktioniert es mit so großen Datensätzen? Die müssten dann ja alle in JSON-Arrays oder ähnlichem gespeichert werden.
Edit:
GET-Requests sollten doch auch funktionieren, solange man HTTPS-Protokolle benutzt.
Ich weiß, dass GET-Requests zwar von einigen Browsern (wie IE) gecached werden, was dazu führen kann,
dass man immer den gleichen Wert (Trotz Serverside-Änderung) bekommt, die PWA wird aber eh nur
im Android Web-View verwendet, der meines Wissens nach GET-Requests nicht cached.
Edit 2:
Könnte man nicht auch Offline-DBs wie PouchDB benutzen? Die benutzen die IndexedDB und kannst da POST-Requests machen.
Auf keinen Fall. Eine komplette User-Tabelle herunterzuladen ist keine so gute Idee.
Die Sache ist ein wenig komplexer und eventuell sicherer als ihr gerade glaubt.
Ich glaube eure Bedenken sind, dass jeder User die Daten aller User erhält. Dem ist aber nicht so.
Alle User sind einer Gruppe zugeordnet, die, für mein Beispiel, z.B. eine Firma oder vergleichbares darstellt (Tenant).
Dann gibt es da noch die Geräte. Jedes neue Gerät muss vom Tenant freigeschaltet werden. Ohne diese Freischaltung, passiert da gar nichts.
Das Gerät wird dann genau einem Tenant zugewiesen. Ist dies passiert, DANN werden die Daten für die User heruntergeladen, aber NUR für DIESEN Tenant.
Dabei handelt es sich um maximal 50 Nutzer.
Sprich: Auf einem Gerät sind nur die User-Daten für die User des Tenants (also z.B. einer Firma).
Die Geräte bleiben Tenant-intern und sind für niemanden außer die User des Tenants zugänglich.
Es ist also nicht möglich, dass fremde an die User-Daten kommen und auch andere Tenants nicht.
Des Weiteren kommt hinzu, dass die PWA ausschließlich im Android WebView benutzt werden kann. Ich recherchiere da gerade noch aber ich glaube, dass du z.B. die IndexedDB im Android WebView nicht einfach so verändern oder überhaupt eingesehen werden kann. Die Daten werden natürlich encrypted.
Damit also irgendwas schief gehen kann, müsste ein User des Tenants an ein zugewiesenes Gerät (immer ein Smartphone) des Tenants kommen und (falls möglich) die IndexedDB vom Android WebView auslesen und die Daten entschlüsseln (sofern er sie nicht verändern kann).
Das WAR der Plan. Da mir aber von Anfang an schon bewusst war, dass es da deutlich bessere Methoden gibt, habe ich mittlerweile ein System, dass ausschließlich Online Authentifiziert. Um das kurz zu erklären:
Die PWA behandelt die Statusrückmeldung von irgendwas. Welchen Status, der Name des Status, usw. ist natürlich Tenant-spezifisch und kann von jedem Tenant bestimmt werden. Dazu muss wie im anderen Ansatz immer noch das Gerät freigeschaltet werden. Um die App auch offline benutzen zu können wird (sofern die App offline gestartet wird) erstmal KEINE Authentifizierung abgefragt. Die Konfigurationen für die verschiedenen Status werden aber heruntergeladen. Man führt also Offline eine Statusrückmeldung durch, die erstmal lokal gespeichert wird. Ist man wieder Online, wird der Status erst synchronisiert, wenn dann eine Online-Authentifizierung erfolgt ist.
Variante 1 ist unsicherer, aber so würde ich es gerne machen, wenn es nicht zu unsicher ist (da warte ich auf eure Rückmeldung).
Variante 2 ist deutlich sicherer (glaube ich zumindest, auch da warte ich auf eure Rückmeldung).
Passt. Nehme den Weg, wo ich ausschließlich Requests im Service-Worker Cache speichere.
Ist richtig. Und das ist auch eigentlich kein Problem. Man sollte aber ja eigentlich keine GET-Requests machen, wenn es um sensitive data geht, was bei dem Abfragen des Users aber zum Problem wird... Macht da https die Sache sicher?Aber wie eingangs erwähnt eben keine POST-Requests.
Der Link funktioniert leider nicht mehr... Aber "Basically, the solution serializes requests to IndexedDB." liefer ja im Prinzip einen Lösungsansatz, der zumindest in meinen Augen plausibel klingt.An interesting solution is the one presented in the ServiceWorker Cookbook: https://serviceworke.rs/request-deferrer.html Basically, the solution serializes requests to IndexedDB.
Das verstehe ich noch nicht ganz... Also ich sende Online einen POST-Request, der nicht gecached wird. Sobald ich offline bin, schlägt der POST-Request fehl und ich speichere die Daten im LocalStorage. Aber was soll ich denn da speichern? Wenn ich vorher nichts cache, dann kann ich ja auch nichts speichern oder verstehe ich da was falsch?Aber genau genommen kannst du es dir doch einfacher machen. Du sendest einen POST-Request und wenn der fehlschlägt, werden die Daten im LocalStorage gespeichert und nach einer bestimmten Zeit erneut abgeschickt.
Das verstehe ich noch nicht ganz... Also ich sende Online einen POST-Request, der nicht gecached wird. Sobald ich offline bin, schlägt der POST-Request fehl und ich speichere die Daten im LocalStorage. Aber was soll ich denn da speichern? Wenn ich vorher nichts cache, dann kann ich ja auch nichts speichern oder verstehe ich da was falsch?