zweig beta

Das Ergebnis hat mich geschockt – Beta Test

Für die ersten Test mit echten Menschen habe ich ein kurzes Test Hörspiel erstellt und musste einige grundlegende Dinge einbauen um die Android App erstmal bedienbar zu machen.

Firebase Performance eingebaut

Firebase Performance misst wie lange verschiedene Dinge brauchen. Zum Beispiel wie lange man warten muss bis sich die App öffnet. Wie schnell eine App reagiert ist ein sehr wichtiges Qualitätsmerkmal. Darum war es mir wichtig diese Firebase Funktion sehr früh einzubauen. So kann ich mitverfolgen wie sich einzelne Funktionen der App auf die Geschwindigkeit auswirken. 

Komplette Spieldaten mit einem Server Call in der Datenbank erstellen

In der Alpha Version gab es eine Stelle in der App die besonders lange dauerte. Das war das laden der Kapitel Daten bevor ein neues Kapitel beginnt. Dafür waren mehrere Datenbankzugriffe vor jedem Kapitel notwendig. Damit war kein flüssiger Spielablauf möglich. Das konnte ich aber drastisch verbessern. Die Daten von einem gesamten Hörspiel sind jetzt in einem Objekt gespeichert. Das ganze Objekt wird mit einem Server Call in die Firebase Datenbank übertragen. Ebenso einfach kann ich dieses Objekt mit einem Server Call wieder abfragen. Somit gibt es nur eine kurze Ladezeit bevor ein Kapitel beginnt und während dem Spiel nicht.

Android ViewModel

In einem ViewModel kann man Daten speichern die das User Interface benötigt. Bei einer Konfigurationsänderung während des Spiels wird die Activity neu erstellt, das ViewModel bleibt aber erhalten. So kann man den Zustand des User Interfaces schnell wieder herstellen. Ich verwende das um die Abspielposition während eines Spiels zu speichern.

Einfaches Test Hörspiel

Bisher konnte meine Hörspiel App nur Text anzeigen. Um den Audioplayer zu implementieren habe ich also ein kurzes Test Hörspiel aufgenommen. Das waren einfach nur 3 kurze Kapitel in denen ich Blödsinn rede. Dann habe ich den ExoPlayer verwendet um diese lokal gespeicherten Audiofiles abzuspielen. Wichtig war mir hier, dass die aktuelle Position im Spiel gespeichert wird und man an dieser fortfahren kann wenn die App zum Beispiel im Hintergrund war. 

Liste aller Spiele

Als nächstes musste ich eine Möglichkeit schaffen damit ein User überhaupt ein Hörspiel starten kann. In meiner MainActivity zeige ich dafür eine Liste aller am Server liegenden Hörspiele an. 

Service für Audio Download

Wenn man nun auf einen Listeneintrag clickt, werden mithilfe eines Services im Hintergrund alle Audiofiles des Hörspiels vom Server auf das Gerät geladen. Wenn der Download erfolgreich war, kann man mit einem weiteren klick das Spiel starten. An der Stelle muss ich dem User aber noch anzeigen in welchem Zustand das Spiel gerade ist. Ich könnte ein Download Icon anzeigen und das später gegen ein Play Icon austauschen. 

Splash Activity 

Das allererste das man beim starten der App sehen soll ist mein Splashscreen. Den habe ich auch für die beta Version erstellt. Das ist eine eigene Activity die fullscreen ein drawable herzeigt und dann zum login oder zur MainActivity weiterleitet. Momentan besteht das drawable nur aus meiner Primärfarbe.

Login Activity

Ein weiterer essenzieller Teil der App, vor allem für neue User ist der Login. Das Registrieren und ein einloggen kann ein extrem komplizierter Monster Code werden wenn man nicht aufpasst. Aber das ist auch etwas das man nicht selber machen muss. Ich habe dafür FirebaseUI verwendet. Das ist ein fertiges Registrierungs und Login Paket das mit wenigen Zeilen Code an einem Abend einbaubar ist. Wenn man dann noch ein passendes Theme verwendet, passt sich auch das Aussehen gut in die eigene App ein.

Von ExoPlayer zu MediaPlayer

Nachdem das Abspielen des Hörspiels funktioniert hat, habe ich festgestellt, dass ich all die Funktionen des Exo Players gar nicht brauche. Also habe ich alles auf den etwas einfacheren MediaPlayer umgestellt. 

Mehrere MediaPlayer gleichzeitig

In der ersten Version meines Players konnte ich immer nur ein Audiofile nach dem anderen abspielen. Damit war aber kein flüssiger Spielablauf möglich. Darum erstelle ich für jeden Sound den ich abspielen will, einen eigenen MediaPlayer. Somit entstehen weniger lästige Pausen während dem Spiel.

Erstes Testspiel – Box Machine

Das Ziel der Betaversion war es, eine App soweit zum funktionieren zu bringen, dass echte Menschen sie testen könne und einen ersten Eindruck vom Spielgefühl bekommen. Denn das früher Benutzerfeedback ist sehr wichtig um nicht viel Zeit in unwichtige Dinge zu investieren. Also musste ich ein erstes Hörspiel aufnehmen. Um es möglichst schnell und einfach zu halten habe ich in meinem Wohnzimmer gemeinsam mit meinen Kindern ein paar Geräusche aufgenommen und zu einem sehr einfachen Boxspiel zusammengebaut. Man muss mit dem Handy auf einen imaginären Boxsack schlagen. Man hört dann Schlaggeräusche und Schmerzensschreie. Das dient aber nur zum Test und wird nicht veröffentlicht werden, weil ich auch nicht die Stimmen meiner Kinder öffentlich verwerten will. Für eine spätere Version muss ich also noch eine etwas professionelleres Hörspiel produzieren.

Änderung der Spiellogik

Als ich diese Hörspiel dann zum ersten Mal ausprobiert habe, habe ich aber schnell gemerkt, dass es sich so noch nicht richtig anfühlt. Es spielte sich noch etwas zu langsam und man fühlt sich nicht richtig miteinbezogen. Um dieses Problem zu lösen habe ich die Spiellogik stark erweitert. In der Betaversion gibt es jetzt Audioteil den ich “play” nenne. Da wird einfach eine Hörspiel Sequenz abgespielt ohne, dass eine Interaktion möglich ist. Danach folgt gleich anschließend der “receive” Teil. Da wird ein Audio File abgespielt zu ständig wiederholt. Währenddessen kann jederzeit die Interaktion mit dem Benutzer stattfinden. Und sobald der Nutzer etwas getan hat um eine Entscheidung zu treffen wird der sogenannte “feedback” Teil abgespielt. Das ist einen direkte Antwort auf die jeweilige Entscheidung des Nutzers. Danach folgt dann der Play Teil des nächsten Kapitels. 

World4You Webhosting
LEGO SYSTEM AU

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert