Daten seiner eigenen app von vielen Endgeräten abrufen und verwenden

Huri57

Cadet 2nd Year
Registriert
Mai 2020
Beiträge
23
benutze Android studio mit Kotlin. Fände es super wenn die Antworten auch für diese Präferenzen kommen. ;)

Hallo,
ich bin gerade am Erarbeiten einer App. Dabei bräuchte ich auch Daten der App, die von vielen Endgeräten stammen. Hier eine Erläuterung:
Angenommen es gibt einen Button auf dem Screen und jedes Mal wenn der Nutzer auf den Button klickt soll die variable „ButtonClicked“ um 1 vergrößert werden. Sagen wir nun es gibt 3 Nutzer. Dabei klicken Nutzer 1 und 2 6 mal auf den Button und Nutzer 3 4 mal auf den Button. Nun soll das alles zusammengezählt werden; also:
Nutzer 1 = 6 -> ButtonClicked=6
Nutzer 2 =6 -> ButtonClicked=6
Nutzer 3=4 -> ButtonClicked=4
6+6+4 = 16 ->
ButtonClickedInsgesamt = 16

Doch wie funktioniert dies ?
 
Die Stichworte, die Dir weiterhelfen (und das sogar unabhängig von der Programmiersprache) sind vermutlich: Client-Server-Architektur sowie Datenbank ;)

Jede Eingabe in der jeweiligen App muss an eine zentrale Stelle geschickt werden und von dort regelmäßig auf Änderungen abgefragt werden.
 
Nur für dich intern oder soll das Ergebnis an die Geräte gepusht werden? Wenn ersteres: Das was Wurzelsepp geschrieben hat.
 
...sofern sich die Geräte nicht untereinander erreichen können. Wofür es in Reichweite eines gemeinsamen LAN Möglichkeiten gibt.

Beim schnellen googeln habe ich keine Treffer gefunden (also nur eine Vermutung), aber nach meinem Verständnis müsste der direkte Datenaustausch selbst zwischen zwei Handys über das Mobilfunknetz möglich sein wenn beide eine IPv6 Adresse haben.
 
Client (Android Smartphone) sendet Event (Button-Klick) an Backendserver (zentrale DB) via Web-API (Rest/GraphQL).

Hier reicht ein einfaches CRUD-Framework als Backend aus. Bitte an Authentifizierung (OAuth) und Versionierung denken (Client A sendet noch mit App v1.0.0, Client B mit v3.2.1). Client kann zudem offline sein oder Backend kann nicht erreichbar sein (Event lokal speichern und bei verfügbaren Netz senden). Payload kann zudem zusätzlich verschlüsselt werden. Wenn gewünscht, können die Clients über neue Button-Klicks der anderen Clients informiert werden; Server-Sent Events wären hier die einfachste Lösung.

Oder halt ein Blockchain-Startup gründen. Auch eine Möglichkeit... :hammer_alt:
 
@Hayda Ministral Das setzt voraus, dass jeder Mobilfunkprovider IPv6 unterstützt und selbst wenn das gegeben ist haben die Geräte ja wechselnde IP-Adressen. Wie soll dann Gerät A wissen unter welcher Adresse Gerät B und C erreichbar sind?
 
snaxilian schrieb:
@Hayda Ministral Das setzt voraus, dass jeder Mobilfunkprovider IPv6 unterstützt

....jeder beteiligte Mobilfunkprovider...

und selbst wenn das gegeben ist haben die Geräte ja wechselnde IP-Adressen. Wie soll dann Gerät A wissen unter welcher Adresse Gerät B und C erreichbar sind?

Wer etwas nicht will findet Gründe. Wer etwas will findet Wege. Für das Problem wechselnder IP-Adressen gibt es bereits einige Lösungsangebote.

Ich habe, nur um das klar zu stellen, keineswegs behauptet dass dies eine alltagstaugliche Lösung ist. Wer nach Lösungen sucht tut aber gut daran erst einmal alle möglichen Varianten aufzuzählen und dann erst diejenigen auszusondern die für sein spezielles Problem nicht in Frage kommen. Sonst gibts schnell einen Tunnelblick.
 
  • Gefällt mir
Reaktionen: snaxilian
Du hast natürlich recht, jeder beteiligte Provider und ja man könnte in die entsprechende App einen dyndns-Anbieter integrieren und die Daten anschließend direkt über ein p2p Protokoll austauschen. Anstatt einem zentralen "Server" bzw. der Datenbank hast dann mit dem dyndns-Anbieter einen (anderen/externen) zentralen Dienst. Wahrlich meiner Meinung nach nicht die beste Möglichkeit aber in der Tat gut möglich.
 
BeBur schrieb:
Nur für dich intern oder soll das Ergebnis an die Geräte gepusht werden? Wenn ersteres: Das was Wurzelsepp geschrieben hat.
Intern
Sorry für die späte Reaktion; hatte die letzten Tage Internet-Probleme
Ergänzung ()

NPC schrieb:
Client (Android Smartphone) sendet Event (Button-Klick) an Backendserver (zentrale DB) via Web-API (Rest/GraphQL).

Hier reicht ein einfaches CRUD-Framework als Backend aus. Bitte an Authentifizierung (OAuth) und Versionierung denken (Client A sendet noch mit App v1.0.0, Client B mit v3.2.1). Client kann zudem offline sein oder Backend kann nicht erreichbar sein (Event lokal speichern und bei verfügbaren Netz senden). Payload kann zudem zusätzlich verschlüsselt werden. Wenn gewünscht, können die Clients über neue Button-Klicks der anderen Clients informiert werden; Server-Sent Events wären hier die einfachste Lösung.

Oder halt ein Blockchain-Startup gründen. Auch eine Möglichkeit... :hammer_alt:

Wurzelsepp29 schrieb:
Die Stichworte, die Dir weiterhelfen (und das sogar unabhängig von der Programmiersprache) sind vermutlich: Client-Server-Architektur sowie Datenbank ;)

Jede Eingabe in der jeweiligen App muss an eine zentrale Stelle geschickt werden und von dort regelmäßig auf Änderungen abgefragt werden.
Würde sowas wie auch Firebase von Google in Frage kommen? Das soll ja auch seine eigene Data-Base haben (Wenn ich es richtig verstanden habe, sorry bin noch sehr neu in dieser Materie)
Oder muss diese Funktionalität selbst gemacht werden?
Eine Verschlüsselung brauche ich zum Glück nicht, da es keine sensiblen Daten sind...
ist die Authentifizierung über Google möglich bzw. ist das überhaupt nötig, wenn jedes Endgerät seine eigene IP-Adresse hat? (Nochmal sorry, falls die Fragen unsinnig sind)
Hayda Ministral schrieb:
...sofern sich die Geräte nicht untereinander erreichen können. Wofür es in Reichweite eines gemeinsamen LAN Möglichkeiten gibt.

Beim schnellen googeln habe ich keine Treffer gefunden (also nur eine Vermutung), aber nach meinem Verständnis müsste der direkte Datenaustausch selbst zwischen zwei Handys über das Mobilfunknetz möglich sein wenn beide eine IPv6 Adresse haben.
Letztendlich bräuchte nur ich die Zahlen des einzelnen Handys(die könnten dann bei mir zusammenaddiert werden oder?); die Handys müssten sich doch eigentlich nicht untereinander austauschen müssen oder etwa doch?



Und wirklich vielen vielen Dank für die Antworten :)
Ergänzung ()

Und noch eine Frage: Wo sollte ich diese Daten dann am besten einsehen? In der App selbst vielleicht, indem ich einen Zugangscode wo eingebe und eine ganz andere Ansicht der App habe?
 
Zuletzt bearbeitet:
Huri57 schrieb:
Eine Verschlüsselung brauche ich zum Glück nicht, da es keine sensiblen Daten sind...
Bitte bitte bitte bitte lege deine Gedanken und Handlungsmethoden oder 80er Jahre ab. Verschlüsselung ist kein Hexenwerk und falls du deine Anwendung früher oder später erweiterst fallen ggf. doch schützenswerte Daten an und dann musst deine Anwendung nicht komplett umbauen. Ein weiterer nicht zu verachtender Vorteil ist die Sicherstellung der Integrität der Daten bei Übermittlung. Sollte also durch einen beliebigen Übermittlungsfehler zwischen Client und Server oder zwischen Client und anderem Client die Daten verändert werden so würde dies auffallen und erneut angefordert werden oder per Fehlermeldung darauf hinweisen.
Huri57 schrieb:
ist die Authentifizierung über Google möglich bzw. ist das überhaupt nötig, wenn jedes Endgerät seine eigene IP-Adresse hat?
Haben alle relevanten Endgeräte statische/feste IP-Adressen? Selbst wenn lassen sich diese für einen potentiellen Angreifer oder Script-Kiddieh verfälschen. Eine vernünftige Authentifizierung ist also sinnvoll. Wenn du Firebase verwenden willst: Dies hat da bereits etwas passendes integriert. https://firebase.google.com/products/auth?hl=en
 
snaxilian schrieb:
Unnötig langes Zitat durch Moderator entfernt
Stimmt; Vielen Dank! Deine Argumente sind wirklich sehr schwerwiegend für jegliche Apps ;) -Wäre alleine nie drauf gekommen, dass die Verschlüsselung auch bei der Übermittlung einen immensen Vorteil verschafft.
Kann ich die Verschlüsselung auch über Firebase vornehmen?


snaxilian schrieb:
Haben alle relevanten Endgeräte statische/feste IP-Adressen? Selbst wenn lassen sich diese für einen potentiellen Angreifer oder Script-Kiddieh verfälschen. Eine vernünftige Authentifizierung ist also sinnvoll. Wenn du Firebase verwenden willst: Dies hat da bereits etwas passendes integriert. https://firebase.google.com/products/auth?hl=en
Stimmt, außerdem wäre so auch das Verwenden der App geräteübergreifend möglich oder? Also die App wird eine Plan/Kalender App und es wäre eine ganz hilfreiche Funktion, wenn z.B. der Vater dem Kind einen Termin einschreiben könnte. Würde das dann auch über die Accounts laufen? (Die Accounts müssten bloß miteinander verbunden sein, was man dann aber in der App selbst machen müsste, glaube ich)
Also kann ich dann Firebase auch ohne CRUD-Framework oder den anderen Methoden, die hier genannt wurden nutzen oder? (Die Datenübermittlung findet dann hauptsächlich über FIrebase statt oder?; Man müsste Firebase nur implementieren, oder? )
Sorry für die ganzen "oder-Fragen"😅.
Und wirklich vielen vielen Dank für die Antworten! :)
 
Zuletzt bearbeitet von einem Moderator: (Unnötig langes Zitat durch Moderator entfernt)
Huri57 schrieb:
Kann ich die Verschlüsselung auch über Firebase vornehmen?
Du willst selbst eine App entwickeln aber bist entweder zu faul oder nicht willens oder nicht fähig diese absolut simple Frage selbst in eine Suchmaschine oder das Suchfeld auf der Seite von Firebase einzutippen?
https://firebase.google.com/support/privacy#data_encryption
Für die nächste offensichtliche Faulheitsfrage müsstest du mir allerdings erst 5€ zukommen lassen bevor ich für dich suche und das Ergebnis hier poste, ok?

KalenderApps und/oder Planungs-/TodoApps gibt es wie Sand am Meer, warum willst du das Rad neu erfinden?
Eine potentielle Lösung wäre z.B. Nextcloud mit den passenden Erweiterungen: https://apps.nextcloud.com/categories/organization
Da brauchst "nur" nen passenden Webspace bei nem Hoster der idealerweise gleich Let's Encrypt unterstützt, dann hast da vergleichsweise geringen Aufwand mit.
Anders sieht es natürlich aus wenn du das Projekt eher verfolgst um programmieren zu lernen. Solltest bei Firebase aber die Kosten im Auge behalten ;)
 
  • Gefällt mir
Reaktionen: BeBur
snaxilian schrieb:
Du willst selbst eine App entwickeln aber bist entweder zu faul oder nicht willens oder nicht fähig diese absolut simple Frage selbst in eine Suchmaschine oder das Suchfeld auf der Seite von Firebase einzutippen?
https://firebase.google.com/support/privacy#data_encryption
Für die nächste offensichtliche Faulheitsfrage müsstest du mir allerdings erst 5€ zukommen lassen bevor ich für dich suche und das Ergebnis hier poste, ok?
Sorry, ich hatte auf Firebase erstmals nur "Custom domain & SSL" und war mir deswegen nicht sicher. Ja die zweite Frage war wirklich überflüssig von mir; über Firebase Auth können Daten in der Cloud gespeichert werden und so auch geräteübergreifend verwendet werden.

Mir geht es hauptsächlich um das Programmieren lernen. Wäre auch für das Abi oder Zukunft denke ich nicht verkehrt...

snaxilian schrieb:
KalenderApps und/oder Planungs-/TodoApps gibt es wie Sand am Meer, warum willst du das Rad neu erfinden?
Eine potentielle Lösung wäre z.B. Nextcloud mit den passenden Erweiterungen:

Wir wollen das, was uns bei größeren Plan/Kalender-Apps fehlt, in unsere einbinden. Die App soll vor allem auch an Schüler gerichtet sein, was das Planen angeht (Wir sind selbst auch erst in der 8. Klasse(bzw. 9. nach den Sommerferien) und bis jetzt habe ich noch keine einzige App gefunden, mit der ich rundum zufrieden war) Das Ziel ist Kalender, To-Do-Liste, Pläne und Vorsätze in einer App zu verschmelzen, sodass vor allem die Vorsätze und Pläne mit Motivation umgesetzt werden können. In der Corona-Zeit hat man ja sehr stark gemerkt, wie sehr es an Planung der eigenen Aufgaben mangelt. Und eine wirklich hilfreiche App hatte niemand(Ok, zugegeben Viele hätten auch das Interesse daran nicht)

snaxilian schrieb:
Solltest bei Firebase aber die Kosten im Auge behalten ;)

Der Plan wäre erstmals die kostenlose Version zu nutzen. Wir haben auch noch einige Monetarisierung Strategien entworfen, um Entwicklungskosten zu decken (keine Sorge sind keine Werbe-Banner oder Werbe-Videos etc.; auch wird die App vollkommen kostenlos[Wir finden es nämlich schade, wenn die App nur für "Wohlhabende" zugänglich wäre; Wir wollen jedem die Möglichkeit geben unsere App nutzen zu können]).

Die Monetarisierung richtet sich auch nicht auf einen starken Gewinn aus.
Und wenn die App in unsren Augen perfekt ist, ist es auch etwas worauf man sehr stolz sein kann nehme ich an.

Und jetzt noch eine einzige Frage: Lohnt sich Firebase gegenüber einem eigenen CRUD-Framework?
 
Zuletzt bearbeitet:
Ich glaube, du bringst hier einiges durcheinander. Das was du machen willst, klingt für mich eher nach einem klassischen Client-Server-Ansatz und nicht nach serverless Apps mit Firebase:

Anwender deiner App legen (relationalen) Content an, lesen, updaten und löschen Content. Content ist ggf. für mehrere Anwender sichtbar. Benutzer deiner App haben möglicherweise unterschiedliche Rollen inne.

Wollte ich das umsetzen, würde ich einen Server implementieren, der Webservice-Requests von deiner App entgegennimmt und CRUD-Operationen in einer Datenbank durchführt. Irgendwie sehe ich nicht, wo hier Firebase, außer für Push-Notifications, ins Spiel kommen könnte.

Vielleicht wäre es sinnvoller, nicht gleich mit personenbezogenen Daten und verteilten Systemen zu hantieren, wenn man Anfänger ist. Ich habe das starke Gefühl, dass du hier mehrere Schritte vor dem ersten machen möchtest. Zumindest legen das deine Fragen nahe.
 
  • Gefällt mir
Reaktionen: BeBur
mental.dIseASe schrieb:
Unnötig langes Zitat durch Moderator entfernt
Ja bin noch ziemlicher Anfänger(Lern gerade noch fleißig über Udacity)😅. Die App ist auch gerade noch in der Planung und da so ein Feature wichtig wäre, wollte ich mal kurz nachfragen wie das vom Prinzip her funktioniere.

Also der Hauptaspekt von mir ist, dass die Anzahl an Klicks auf einen Button von einem Gerät mir übermittelt wird. Und zum Schluss werden die Anzahlen an Klicks verschiedener Geräte, die mir übermittelt wurden, zusammenaddiert werden...
Also ja, ein Client-Server-Modell eigentlich. Ich dachte bloß über Firebase würden mir auch Daten übermittelt werden können; ganz ohne Server Bzw. über die Google-Server.
Lieg ich da etwa doch falsch ?😅

Das mit der Verschlüsselung sowie der Authentifizierung ist eher nebensächlich, wobei es durchaus Vorteile bietet.
 
Zuletzt bearbeitet von einem Moderator: (Unnötig langes Zitat durch Moderator entfernt)
Huri57 schrieb:
Also ja, ein Client-Server-Modell eigentlich. Ich dachte bloß über Firebase würden mir auch Daten übermittelt werden können; ganz ohne Server Bzw. über die Google-Server.
Lieg ich da etwa doch falsch ?😅

Das geht ja auch, liegst schon richtig. Schau dir mal Firestore an, damit kannst du dann auch die Daten in Echtzeit aktualisieren.
 
  • Gefällt mir
Reaktionen: Huri57
Ich würde stark empfehlen erst mal mit eine reinen Offline-Version der App anzufangen. Das ist schon komplex genug, und da gibt es Unmengen zu lernen. Oder erstmal kurz Pause bei der Entwicklung machen und dich grundsätzlich mit Client/Server Architektur auseinandersetzen. Für die Sachen die Du vorhast, sollten alle Daten auf dem Server sein, nicht nur in der App.

Ich würde persönlich von Firebase abraten, im wesentlichen Weil es Google-spezifisch ist, es evtl. Komplikationen mit den Kosten geben kann (besonders als Schüler), und ich denke das eine eigene API einen wesentlich größeren Lerneffekt hat. Die Firebase Tools sind dafür gedacht das man sehr schnell eine App hochziehen kann ohne das Backend selbst zu verwalten und zu programmieren. Die Gefahr dabei besonders als Anfänger ist das man sich da an Tutorials langhangelt und aber die Zusammenhänge nicht richtig versteht und dann feststeckt.

Wenn Du die richtige Variante bauen willst mit Kommunikation, würde ich einfach mal damit experimentieren eine einfache REST API selbst zu schreiben. Geht in so ziemlich jeder Programmiersprache und Framework. Dann noch etwas mit eine Datenbank spielen, und deine App mit deiner eigenen API reden lassen und Sachen in der DB speichern und wieder abrufen. Das ist alles kein Hexenwerk, aber das solltest du dir wirklich mal in Ruhe alles ansehen.

Bei den Daten von anderen Schülern wäre ich auch erstmal ganz vorsichtig, du begibst dich da vermutlich auf rechtlich etwas wackligen Boden. Da solltest du dich nochmal genauer informieren.
 
  • Gefällt mir
Reaktionen: mental.dIseASe und BeBur
Dalek schrieb:
Unnötig langes Zitat durch Moderator entfernt

vielen Dank für die Antwort erstmal! Ja stimmt, Google ist auch sehr kommerziell. Wobei ich zugeben muss, dass ich am Anfang dachte, die kostenlose Version würde die erste Zeit gute Dienste leisten. 😅 Und auch wahr, die Eigenleistung wird durch Firebase stark vermindert.
Von den Kosten her müsste man sich einmalig einen Server dann anschaffen oder? Bzw. wären flexible Server von einer Firma sinnvoller(Also für einige Jahre wird wahrscheinlich eh ein Server reichen; außer die App kommt zu gut an 🙃)
Da es lediglich nicht personenbezogene Daten sind, sondern statistisch bezogene Daten(nur einige Zahlen), vermute ich, dass es vom Datenschutz her in Ordnung gehen sollte. Aber ich werde mich da auf jeden Fall noch informieren. In der heutigen Zeit ist der Datenschutz ja sehr streng...
 
Zuletzt bearbeitet von einem Moderator: (Unnötig langes Zitat durch Moderator entfernt)
Erst entwerfen, dann bauen, dann deployen. Probier mal, dir über dein Datenmodell und deine Abläufe/Usecases klar zu werden. Was zeigt deine App für Daten an, was geben Anwender deiner App für Daten ein, wie interagieren sie mit bestehenden Daten? Was gibt es für Rollen/Akteure im gesamten System (also App und Backend)?

1. Nimm dir Stift und Papier und zeichne dir auf, was ein Anwender alles sehen und tun kann, Bildschirm für Bildschirm, von der Installation der App bis zur Deinstallation und alle Usecases dazwischen.
2. Dann überlege dir, was für Daten er dabei sieht, welche er anlegt oder welche er bearbeitet oder ergänzt. Daraus baust du dir ein ER-Modell.
Bis hierhin hast du noch gar nichts programmiert, sondern entworfen wie ein Ingenieur.
3. Dann baust du dir ein Backend, das deine Daten aus 2. in eine Datenbank schreibt und liest. Schreiben und lesen tut es sie je nachdem, was du für Abläufe unter 1. identifiziert hast.
4. Dann baust du dir für die unter 3. gebaute Logik eine wie auch immer geartete Schnittstelle nach draußen (vielleicht 'ne REST-API).
5. Dann baust du dir deine App, die die Schnittstellen aus 4. anspricht und damit die Abläufe aus 1. umsetzt.

Wo du den Kram in wessen Rechenzentrum deployst, darüber kannst du ganz zum Schluss nachdenken.
 
  • Gefällt mir
Reaktionen: snaxilian, BeBur und Huri57
Zurück
Oben