My WM App

  • Antworten:11
Gelöschter Account
  • Forum-Beiträge: 2

25.06.2014, 21:13:21 via Website

Hallo zusammen,

aus gegebenem Anlass möchte Ich eine WM-App programmieren - ich weiß, bisschen spät - aber mir geht es eher um das was ich dabei lernen kann.

Die User-App erfordert eine Registrierung und ein Login. Dann möchte Ich in einer ListView den kompletten Spielplan der WM, mit den zukünktigen Spielen ohne Ergebnis und den vergangenen mit Ergebnis anzeigen (plus Spieldatum), wie man das so kennt. Die Spielergebnisse möchte Ich in einer Datenbank ablegen.
Hierzu möchte Ich des Weiteren eine "Dateneingabe"-App schreiben welche nur für mich als Datenprovider bzw. zur Dateneingabe dient, damit Ich über diese alle Ergebnisse in die DB schreiben kann.

Die Fragen die sich mir stellen sind die folgenden:

  • Wie gehe Ich so etwas am besten an?
  • Wie kann Ich realisieren, dass die Daten und Spielergebnisse, welche Ich via "Dateneingabe"-App in die DB schreibe direkt und automatisch in der View der User-Apps aller User geändert werden, ohne dass die User zuvor über einen "Refresh"-Button die Daten auslesen. Möchte das gerne ohne Refresh-Button realisieren.

Ich hoffe Ich konnte es einigermassen verständlich erklären was Ich vorhabe. Bei Unklarheiten bitte einfach fragen.
Wäre super, wenn jemand ein paar Tipps für einen Beginner hat.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.06.2014, 06:08:44 via App

Bitte sei nicht entteuscht aber wenn du beginner bist dann wirst du er st nach der wm fertig sein auch wenn man schon 1 1/2 jahre dabei ist, würde ich das bis zum wm ende nicht schaffen.
Hängt natürlich davon ab ob du den ganzen Tag programmierst oder noch was anderes zu tun hast.

Aber ich will mal nicht so negativ sein.
Eine Activity mit einer Listview sollte reichen. Die daten holst du aus einer Db ist diese online oder local?
Wenn sie nicht online ist wie kommen dann neue Spieldaten rein?
Für die db ansteuerung brauchst du keine app.
Mit ein paar klassen im oop ists auch getan
Außerdem müsstest du zwischen 2 apps ersmal eine Schnittstelle Definieren.Das macht wenig sinn

Ps wieso login?
dann müssten die Daten ua userspezifisch sein sonst mach auch ein login wenig sinn.
Und wieso sollte man absichlich die Userzahl senken wollen..

PPS wenn die Daten auf alle user dbs übertragen werden sollen nachdem du sie eingetragen hast brauchst du eine Zentrale Datenstelle z.b. eine webserver der auf anfrage der App die nötigen infos gibt.

— geändert am 26.06.2014, 06:12:47

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sa Be
  • Forum-Beiträge: 6

30.06.2014, 16:19:47 via Website

Okay, vielen Dank für die Vorwarnung, denke da hast Du Recht, neben Frau und Kind bleibt mir nur die Nacht um micht damit zu beschäftigen:).
Möchte die Daten in einer MySQL-DB haben um diese dann mit einer SQLite-DB zu synchronisieren, damit die App auch funktioniert wenn man offline ist.

Ein Login, da Ich später die App gerne erweitern möchte:

...so dass Ich nach einer Authentifizierung via Login eine Gruppe mit weiteren Usern meiner Application erstellen kann und diese dann eine Gruppe bilden.
In der Gruppe kann man dann für die bevorstehenden Spielergebnisse seinen eigenen Ergebnisstipp eingeben, welche auch bei allen anderen Gruppenteilnehmern angezeigt wird. Somit kann jeder User dann die Spielergebnistipps aller Gruppenuser einsehen. Wie könnte eine solche Gruppierung angegangen werden?

Aufteilen könnte man das Ganze in:

  • Login/ Registrierung
  • Gruppenbildung der User?
  • Anzeige des Spielplans und der Spielergebisse der vergangenen Spiele
  • Anzeige der Spielergebnisstipps alles User einer Gruppe
  • Synchronisation der MySQL-DB und der SQLite-DB
  • Eingabe der Spielergebnisse in DB durch Admin

Was wäre hierfür ein guter Ansatz?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

30.06.2014, 19:01:19 via Website

Zuerst mal solltest du das "Herzstück" der App programmieren, also die Spielplananzeige.
Die Frage ist, ob du einen WebServer für die MySql Db hast, denn wenn ja bietet sich an, PHP zur Ausgabe zu benutzen und den ausgegebenen String wieder in die App zu laden und dort auszuwerten. Ohne PHP ist es eine viel zu große Sicherheitslücke
Vlt. findest du ja eine Webseite, ide immer die richtigen Spieleergebnisse anzeigt, dann könntest du sie automatisch übernehmen, Von Hand ist das aber sicherer (wegen fehlbarkeit der Daten).
Dann solltest du dir übleregen wie Android die Spielergebnisse darstellen soll, und nach dieser idee die View erschaffen.
Dann kannst du die Datenanzeige implementieren.
Setze dir das als eres Ziel, denn es ist nicht sinnvoll, wenn man immer nur schan zu Hälfte programmiert und dann etwas anderes anfängt.
Dann solltest du dir überlegen ob die App eine art Liveticker haben soll, dass zb. während dem Spiel schon gefallene Tore eingetragen werden, für die User, die gerade keine Zeit haben Fußball zu schauen. Das erfordert aber dauerhafte Zei des Admins für das Eintragen der Tore in die DB.
Zudem musst du dich um die Synchronisation der DBs kümmern.
Immer zu pollen und quasi zu erfragen ob neue Daten vorhanden sind, kostet viel Internet für Mobiluser.
Dafür kann man dann die Google Cloud Message nutzen (als Pushdienst)
-> Sorry dass ich viel durcheinander schreibe, mit fällt halt so viel ein was man dabei Berücksichtigen müsste.
Wenn etwas unklar ist, dann einfach nochmal Fragen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

30.06.2014, 19:10:51 via Website

Sorry hab gefailed

PS: wieso ist der Obere Account gelsöscht?

— geändert am 30.06.2014, 19:11:45

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sa Be
  • Forum-Beiträge: 6

30.06.2014, 20:17:51 via Website

Gefailed?
Hatte zufälligerweise zwei Accounts hier....einmal sa be und Sa Be... Einen musste ich löschen laut androidpit und das habe ich. Bin ja Beginner und dachte, dass Ich mir eine Internetseite kaufen könnte inklusive großem Webspace für einen Webserver, oder gibt es hierzu bessere oder günstigere Lösung hierzu?
Ich habe vor:

- Login/ Registrierung:
> Via Java/PHP-Interface, dann dürfte dies auch in Punkto Sicherheit sicher sein. Spricht man hier von einem REST-API?

- Gruppenbildung der User
> Hierzu weiß Ich gar nicht welche Möglichkeiten Ich hier zur Realisierung habe. Was gibt es denn da so?

- Anzeige des Spielplans und der Spielergebisse der vergangenen Spiele
> Anzeige über eine View in Android. Werte bzw. Ergebnisse aus der Datenbank auslesen via makeHttpRequest.

- Anzeige der Spielergebnisstipps alles User einer Gruppe
> Hierzu weiß Ich gar nicht welche Möglichkeiten Ich hier zur Realisierung habe. Was gibt es denn da so? 

- Synchronisation der MySQL-DB und der SQLite-DB
> Auch hierzu weiß Ich gar nicht welche Möglichkeiten Ich hier zur Realisierung habe. Was gibt es denn da so?


- Eingabe der Spielergebnisse in die MySQL-DB durch "Admin"
> Wie und wo gibt man denn typischerweise die Daten als Admin in die Datenbank ein? Ist es sehr schwer eine Art Admin-App zuschreiben welche dann die Daten in die Datenbank schreibt?

Vielen Dank vorab.

— geändert am 30.06.2014, 20:22:47

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

30.06.2014, 20:29:22 via Website

  1. Punkto webspace:
    gibt kostenlose hoster ( zb. kilu.de/lima-city.de dann halt mit werbung), aber wenn du keine HP drauf hast, sondern nur die APi für deine App dann stört die Werbung nicht ,da sie nicht angezeigt wird :)
    Kostengünstig kann ich celeros.de empfehlen
    Dort gibts auch viel Speicherplatz zum günstigen Preis.

  2. Nein Rest Api ist das miener Meinung nach nicht. Aber um das aber einigermaßen sicher zu gestalten brauchst du eigentlich eine SSl verschlüsselung zum Webserver.
    diese kostet aber meistens extra (obwohl ich diese Kosten nicht verstehen kann, ist nur ein eintrag in der Webscrive config)
    Ohne SSl würde ich halt mit hashes arbeiteun und nichts (User + PW) imklartext schicken!

  3. Wenn du verschidenene User hast, kannst du die Gruppen in der DB festlegen.
    Aber dann brauchst du auch berechtigungne zb. wenn darf ich die Gruppe betreten.
    Wer darf mich aus einer Gruppe entfernen.

  4. Das ist ok aber ist es nicht besser dein Webserver meldet sich bei deiner App und sagt "Hey es gibt neue ergebinesse lade sie mal runter" :)
    So musst du nicht das internet auslasten.

  5. Das kannst du dir noch überlegen. Möglichkeinen gibt es viele.
    VLt. hast du ja eine Idee oö. schon mal in einer Andrern App gesehn Dann musst du nur noch wissen wie man das programmmiert.

6.Synchronisation der DB

Kannst du ja glichzeitig mit den Speiledaten machen.
Client holt sich die Daten.
Schreibt sie in eine locale DB und zeigt sie an. Dies ist die einfachste Möglichkeit für.
Sonst ein PHP dass die DBeinträge in einen bestimmten Format ausgibt, sodass du diesen in der App parsen und in die locale DB schreiben kannst.

Da du für die App eh php brauchst, ist es sinnvoll sich ine Weboberfläche zu machen, au der man die Speieergebnisse in die DB eintragen kann.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sa Be
  • Forum-Beiträge: 6

02.07.2014, 19:16:23 via Website

Pascal P.

  1. Punkto webspace:
    gibt kostenlose hoster ( zb. kilu.de/lima-city.de dann halt mit werbung), aber wenn du keine HP drauf hast, sondern nur die APi für deine App dann stört die Werbung nicht ,da sie nicht angezeigt wird :)
    Kostengünstig kann ich celeros.de empfehlen
    Dort gibts auch viel Speicherplatz zum günstigen Preis.

Umsobesser wenn es auch noch kostenlos ist :). Ist da auch der Zugang zu einer DB dabei?

  1. Nein Rest Api ist das miener Meinung nach nicht. Aber um das aber einigermaßen sicher zu gestalten brauchst du eigentlich eine SSl verschlüsselung zum Webserver.
    diese kostet aber meistens extra (obwohl ich diese Kosten nicht verstehen kann, ist nur ein eintrag in der Webscrive config)
    Ohne SSl würde ich halt mit hashes arbeiteun und nichts (User + PW) imklartext schicken!

Kann man bei einer SSL-Verschlüsselung zum Webserver auch mit HttpRequests arbeiten und ist dies dann auch ausreichend?

  1. Wenn du verschidenene User hast, kannst du die Gruppen in der DB festlegen.
    Aber dann brauchst du auch berechtigungne zb. wenn darf ich die Gruppe betreten.
    Wer darf mich aus einer Gruppe entfernen.

Wie kannn Ich denn dynamisch zur Laufzeit eine Gruppierung definieren? Was ist dabei zu beachten und wie kann Ich die Rechte und Zugriffsrechte verteilen? Macht man so etwas via RMI oder ACL? Gibt es noch weitere Möglichkeiten?

  1. Das ist ok aber ist es nicht besser dein Webserver meldet sich bei deiner App und sagt "Hey es gibt neue ergebinesse lade sie mal runter" :)
    So musst du nicht das internet auslasten.

Doch, so meinte Ich das, dass wenn ein Gruppenmitglied Spielergebnisstipps eingegeben hat, diese automatisch in den Views aller anderen Gruppenmitgliedern "sofort" angezeigt wird. Wie kann man soetwas umsetzten? Kann man ein Flag in der DB setzten mittels dem alle Gruppenteilnehmeraccpunt im Hintergrund erfahren, dass im Hintergrund aktualisiert werden muss, ohne das das Gruppenmitglied bewusst bzw. manuell auf einen refreshbutton drücken müsste. Einen solchen Refresh-Button möchte Ich nämlich nicht.

  1. Das kannst du dir noch überlegen. Möglichkeinen gibt es viele.
    VLt. hast du ja eine Idee oö. schon mal in einer Andrern App gesehn Dann musst du nur noch wissen wie man das programmmiert.

6.Synchronisation der DB

Kannst du ja glichzeitig mit den Speiledaten machen.
Client holt sich die Daten.
Schreibt sie in eine locale DB und zeigt sie an. Dies ist die einfachste Möglichkeit für.
Sonst ein PHP dass die DBeinträge in einen bestimmten Format ausgibt, sodass du diesen in der App parsen und in die locale DB schreiben kannst.

Würde die Idee mit vorziehen in der die SQLiteDB immer mit der MySQLDB synchronisiert wird. Gibt es herzu eine typische Realisierung?

Da du für die App eh php brauchst, ist es sinnvoll sich ine Weboberfläche zu machen, au der man die Speieergebnisse in die DB eintragen kann.

Das ist eine wirklich sehr gute Idee, vielen Dank. Und Danke für die Hilfe.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.07.2014, 19:55:17 via Website

  1. Jup bei kilu.de ist auch eine db dabei.
  2. Bei ssl ist ein Http request auch ausreicehnd ich würde es dann halt "https request" nennen.
  3. Also zur Gruppierungen, diese würde ich auschließlich in der DB in einer Tabelle definieren.
    Wenn es aktualisierungen gibt, muss diese jeder cleint kennen, das heiist du brauchst chon eine Art rmi aber das gibt es bei android meines wissens nicht.
    Dafür nutzt man gcm
    Rechte definierst du ach in der DB.
    Bevor der User halt eine Bestimmte Aktion machen will musst du vorher in deiner rechteliste prüfen ob dieser dazu berechtigt ist.

4.
Einen Refresh Button brauchst du garnicht.
Wenn neune Daen von einem User oder vom Admin hinzukommen, dann schreibst du sie in deine online DB, und schickt mit der oben genannten GCM methode eine Nachricht ann alle cleints, dass sie sich die neuen Daten holen sollen und dannn anzeigen.
Dies ersetzt den Refresh button.

Würde die Idee mit vorziehen in der die SQLiteDB immer mit der MySQLDB synchronisiert wird. Gibt es herzu eine typische Realisierung?

Direkt würde ich sowas nicht machen, es muss über php ausgabe und einlesen in Android + schreiben in die locale DB sein.
Wie willst du das sonst machen?
Bei den wenigsten Hoster (auch kostenpflichtige) hast du von aussen zugriff auf den DB server.
---> Funktioniert nur auf die "umständliche" weise, diese ist aber von Sicherheitsaspekt etwas besser.

LG Pascal //It's not a bug, it's a feature. :) ;)

Sa Be

Antworten
Sa Be
  • Forum-Beiträge: 6

02.07.2014, 21:30:40 via Website

Super, vielen Dank, das Hilft mir sehr weiter.

[[cite Pascal P.]]
3. Also zur Gruppierungen, diese würde ich auschließlich in der DB in einer Tabelle definieren.
Wenn es aktualisierungen gibt, muss diese jeder cleint kennen, das heiist du brauchst chon eine Art rmi aber das gibt es bei android meines wissens nicht.
Dafür nutzt man gcm
Rechte definierst du ach in der DB.
Bevor der User halt eine Bestimmte Aktion machen will musst du vorher in deiner rechteliste prüfen ob dieser dazu berechtigt ist.

Das ist genau das was ich suche. Und die Gruppierung realisiere Ich dann über eine Tabelle pro Gruppe mit den UserIDs der jeweiligen Gruppenmitgliedern als Inhalt der Tabelle?
Sieht GCM auch eine Art Request vor, welcher dazu dient eine Erlaubnis direkt von User einzuholen ob dieser der Gruppe beitreten will bzw. hinzugefügt werden darf? Also wie ein Friend-Request bei Facebook? Sonst könnte Ich ja jeden in eine Gruppe stecken und dieser könnte dies nicht vermeiden.

4.
Einen Refresh Button brauchst du garnicht.
Wenn neune Daen von einem User oder vom Admin hinzukommen, dann schreibst du sie in deine online DB, und schickt mit der oben genannten GCM methode eine Nachricht ann alle cleints, dass sie sich die neuen Daten holen sollen und dannn anzeigen.
Dies ersetzt den Refresh button.

Perfekt, so sollte es sein.

Würde die Idee mit vorziehen in der die SQLiteDB immer mit der MySQLDB synchronisiert wird. Gibt es herzu eine typische Realisierung?

Direkt würde ich sowas nicht machen, es muss über php ausgabe und einlesen in Android + schreiben in die locale DB sein.
Wie willst du das sonst machen?
Bei den wenigsten Hoster (auch kostenpflichtige) hast du von aussen zugriff auf den DB server.
---> Funktioniert nur auf die "umständliche" weise, diese ist aber von Sicherheitsaspekt etwas besser.

Ich meinte das auch so, dass Ich über php auf die DB lesend und schreibend zugreifen möchte. Schreibend schreiben ich dann in SQLite ud in MySQL gleichzeitig und Änderungen aktualisiere Ich die DB's (beide) via GCM. Hoffe das könnte so klappen :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.07.2014, 21:42:06 via App

Jup also in der Theorie ist deine App grob geplant.
Dies lässt sich nun auch umsetzen.
Die Gruppenoierungstabelle solltest du selber erstellen und aus sinnvöllichkeit überprüfen etwas denkarbeit schadet nicht ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sa Be
  • Forum-Beiträge: 6

02.07.2014, 22:27:08 via Website

Super, vielen Dank. Ich mache mich an die Arbeit und melde mich ggf. noch mal.

Antworten