Quizapp / Eine Frage am Tag per RSS Feed laden / RasberryPi Server / Privatgebrauch / Hallo Entwickler!

  • Hallo liebe Android Devs,


    ich bin zu Euch gekommen, um eventuell ein paar Ideen zu einem Konzept von mir zu bekommen.
    Ich beschreibe erstmal worum es sich handelt:


    Eine App, die jeden Tag genau eine Frage abfragt. So etwas wie ein Quiz: Frage, 4 Antwortmöglichkeiten, eine Richtige.
    Um nun nicht haufenweise Fragen in dem Code der App an sich zu speichern, dachte ich daran die Fragen auf einem Server (besitze bereits einen Rasberry Pi, momentan "nur" als private Cloud) zu speichern und täglich eine Frage auf Knopfdruck in der App zu laden.
    - An dieser Stelle muss ich sagen, dass ich bisher nur einige Tutorials zu verschiedenen Apps abgeschlossen habe (darunter eben das Thema XML Parsing) und daher noch nicht so ein breitgefächertes Wissen besitze.


    Ich stelle mir vor, dass ich so die Fragen jederzeit erweitern könnte, ohne jedes mal ein Update der App zu veröffentlichen.
    - Ist diese Annahme korrekt?


    Weiterhin soll die App natürlich speichern wie viele Fragen richtig/falsch beantwortet wurden etc, aber das sollte nicht allzu schwer für mich zu realisieren sein.


    Gedacht ist die App nur für eine andere Person. Die eine Person soll jeden Tag eine Frage gestellt bekommen & ich möchte in der Lage sein, neue Fragen hinzuzufügen. (Updatemöglichkeiten bereits in Planung, aber erstmal die Basics auf die Reihe bekommen)


    Falls einer von Euch eine Anmerkung/Anregung hat, die nützlich für dieses Vorhaben ist - ich bin dankbar für jede Information. Gerne auch Schlagwörter zu Themen, die ich mir hierfür aneignen sollte! :)



    Beste Grüße
    AppsWithHearth

  • Zitat

    Ich stelle mir vor, dass ich so die Fragen jederzeit erweitern könnte, ohne jedes mal ein Update der App zu veröffentlichen.


    - Ist diese Annahme korrekt?


    Ja, dein Server stellt halt jeden Tag eine Frage aus deiner Quizdatenbank zu Verfügung, die gesamte Logik welche Frage bereits ausgeliefert wurde findet auf dem Server statt und tangiert nicht die APP. (PHP zum Beispiel)


    Zitat

    Weiterhin soll die App natürlich speichern wie viele Fragen richtig/falsch beantwortet wurden etc, aber das sollte nicht allzu schwer für mich zu realisieren sein.


    Jaein


    Natürlich kannst du die Daten in der App speichern (SharedPreferences), aber sinnvoller ist es sicherlich auch dieses Problem per Client/Server zu lösen,
    sprich die Daten eher auf dem Server abzulegen.


    Sprich QuizApp -> registriert sich am QuizServer und User bekommt eindeutige ID -> das ermöglicht Dir auch die Bereitstellung einer Online-Statistik über die
    besten Spieler -> Spieler daten werden nach jedem Spiel geupdatet.


    Zitat

    Gedacht ist die App nur für eine andere Person. Die eine Person soll jeden Tag eine Frage gestellt bekommen & ich möchte in der Lage sein, neue Fragen hinzuzufügen.


    Ok, habs eben zu spät gelesen. Je nach dem wie kompliziert und sicher du es machen musst, kann man noch über Verschlüsselung nachdenken.



    So um noch mal ins Detail zu gehen, wie am besten anfangen?



    1) Serverteil konzipieren -> Datenbank erstellen -> Routinen zum ausliefern der Quizfragen -> php ist hier sicherlich eine einfache Möglichkeit


    -> XML wäre ein mögliches Datenformat, json ist eventl sogar noch einfacher zu handlen. (wäre meine Empfehlung)


    2) App konzipieren


    3) weiter Fragen stellen

  • Der Client–Server–Ansatz hat nur einen gewissen Nachteil: Klartextkommunikation über das Netzwerk.
    Gesetzt dem Fall, der Nutzer betrachtet Internet und Netzwerkkommunikation nicht als Neuland, so kann er einfach die Daten mitschneiden, analysieren und die korrekte Antwort herausfinden. Ergo: mogeln.


    (Denn seien wir mal realistisch: irgendwie muss aus den übertragenen Daten hervorgehen, welche Antwort die richtige Antwort ist. Eigener Wert 'correctAnswer', XML-Attribut 'isCorrect', irgend ein indizierendes Attribut, immer Antwort an Position 3, eindeutiges Prefix… Woher weiß Deine App sonst, welche Antwort stimmt?)


    Ein Ansatz wäre, dass Du jeder Frage eine 'eindeutige' Identifikationsnummer per Zufall zukommen lässt. So eine Art interne TAN–Liste, die der Server vor dem Ausliefern abstreicht…
    (Keine Ahnung, ob ihr im Zeitalter von mobileTAN und ChipTAN die alten Listen überhaupt noch kennt… Eine Liste, 99 Zahlen mit je 6 Stellen, wovon immer eine benutze abgestrichen wird.)


    Der Server hat dann eine generelle TAN Liste mit sagen wir 90 Einträgen. Diese dient lediglich dem Verschleiern, damit jede Antwort eine ID/TAN hat.
    Sowohl der Server als auch die App haben eine 'gültige Antwort' TAN Liste mit in dem Fall 30 Einträgen.


    Wenn der Server eine Frage ausliefert markiert er die Antworten mit Einträgen aus den TAN Listen: den korrekten Eintrag mit den Einträgen aus der 'gültige Antworten' Liste, die anderen zur Verschleierung mit einer TAN aus der generellen TAN Liste.
    Wenn die App dann den Feed vom Server bekommt, gleicht sie jede ID mit ihrer internen 'gültige Antwort' TAN Liste ab um herauszufinden, welche Antwort stimmt.


    Aus den übertragenen Daten kann man selbst dann nicht mehr ersehen, welche Antwort stimmt, die App hingegen kann es aber doch.
    (Es wäre natürlich sinnvoll, die Liste nicht im Klartext auf der SD Karte des Geräts abzulegen…)


    Mal zum Vergleich ein einfaches und ein verschleiertes JSON:



    Wo erkennt man auf den ersten Blick, welche Antwort ich erwarte, und wo ist es weniger offensichtlich? ;)


    Auf dem Wege ließe sich beispielsweise auch Multiple Choice realisieren, weil Du an Hand der Antwort–IDs ja sehen kannst, wie viele gültig sind.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Zitat

      killphil75 XML wäre ein mögliches Datenformat, json ist eventl sogar noch einfacher zu handlen. (wäre meine Empfehlung)


    Habe mir Json jetzt ausgiebig angeschaut & muss dir zustimmen. Werde lieber das benutzen, vielen Dank schon mal für diesen Tipp!




    Zitat


    Marco Feltmann Ein Ansatz wäre, dass Du jeder Frage eine 'eindeutige' Identifikationsnummer per Zufall zukommen lässt. So eine Art interne TAN–Liste, die der Server vor dem Ausliefern abstreicht…
    (Keine Ahnung, ob ihr im Zeitalter von mobileTAN und ChipTAN die alten Listen überhaupt noch kennt… Eine Liste, 99 Zahlen mit je 6 Stellen, wovon immer eine benutze abgestrichen wird.)


    Auch ein wirklich guter Einwand! Zwar werde ich mich in der ersten Version wohl nur darauf konzentrieren alles zum Laufen zu bringen, dennoch ist das ein äußerst hilfreicher Ansatz für die zukünftige Sicherheit.




    Agenda: (Abgeschlossen // In Bearbeitung // Todo)
    1. - Json als XML Ersatz


    2. - Serverteil (SQLlite Android (?))


    3. - Applikationslogik erstellen


    4. - Haufenweise Fragen stellen


    5. - ...



    Werde mich nun also erstmal in die Erstellung einer Datenbank + das befüllen mit Json Code kümmern, im Anschluss die


    Server/Client Anwendung ausarbeiten.


    Vielen Dank bisher, werde mich mit neuen Fragen melden.
    AppsWithHearth

  • Marco sprach halt das Thema Sicherheit und Verschlüsselung an, wie gesagt ich bin über deine Aussage gestolpert das die App nur für "eine" andere Person ist, da musst du jetzt abschätzen ob du gleich die große Verschlüsselungskeule auspackst oder ob du das Quiz erst mal nur zum Laufen bekommen willst.

  • Marco sprach halt das Thema Sicherheit und Verschlüsselung an, wie gesagt ich bin über deine Aussage gestolpert das die App nur für "eine" andere Person ist, da musst du jetzt abschätzen ob du gleich die große Verschlüsselungskeule auspackst oder ob du das Quiz erst mal nur zum Laufen bekommen willst.

    Erstmal nur zum Laufen bringen, also die Grundfuntktionen soweit fertigstellen und im Anschluss um die Sicherheit kümmern.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!