UserApp-Entwicklung/Tutorials/Beginner: Unterschied zwischen den Versionen

K (zu Kategorie "UserApp-Entwicklung" hinzugefügt)
(Persönliche Anrede entfernt, Nutzer => Mitglied)
Zeile 5: Zeile 5:
== Bevor es losgeht ==
== Bevor es losgeht ==


=== Werde Entwickler ===
=== Entwickler werden ===


Stelle sicher, dass du ein Entwickler bist. Gib dazu '''/apps developer''' im Chat ein und erfülle die Kriterien, falls du das noch nicht getan hast.
Man stellt sicher, dass man ein Entwickler ist. Man gibt dazu '''/apps developer''' im Chat ein und erfüllt die Kriterien, falls man das noch nicht getan hat.


=== Verwende die Desktop-App ===
=== Verwende die Desktop-App ===


Wir empfehlen dir stark, zum Entwickeln die Desktop-App auf deinem Computer zu verwenden. Du kannst die App [https://www.knuddels.de/stapp-win hier herunterladen].<br>
Wir empfehlen stark, zum Entwickeln die Desktop-App auf dem Computer zu verwenden. Man kann die App [https://www.knuddels.de/stapp-win hier herunterladen].<br>


== Die erste UserApp ==
== Die erste UserApp ==


=== Entwicklungs-Server ===
=== Entwicklungs-Server ===
Das Entwickeln beginnt auf dem Entwicklungs-Server. Gib '''/apps developer''' ein und wähle den Punkt '''Login auf Entwicklungs-Server''' aus. Jetzt sollte eine Desktop-Verknüpfung für den Login auf dem Entwicklungs-Server angelegt worden sein.<br>
Das Entwickeln beginnt auf dem Entwicklungs-Server. Man gibt '''/apps developer''' ein und wählt den Punkt '''Login auf Entwicklungs-Server''' aus. Jetzt sollte eine Desktop-Verknüpfung für den Login auf dem Entwicklungs-Server angelegt worden sein.<br>
Wenn du Knuddels über diese Verknüpfung startest, landest du nach dem Login auf dem Entwicklungs-Server. Hier kannst du später in Ruhe an deiner UserApp tüfteln, bevor du deine Änderungen auf dem Live-Server hochlädst.<br>
Wenn man Knuddels über diese Verknüpfung startet, landet man nach dem Login auf dem Entwicklungs-Server. Hier kann man später in Ruhe an der UserApp tüfteln, bevor man die Änderungen auf dem Live-Server hochlädt.<br>


Logge dich jetzt mit den Zugangsdaten auf dem  Entwicklungsserver ein, die dir James gesendet hat ('''Entwickler-Nick''' und '''Entwickler-Passwort''').
Man loggt sich jetzt mit den Zugangsdaten auf dem  Entwicklungsserver ein, die James gesendet hat ('''Entwickler-Nick''' und '''Entwickler-Passwort''').


   Tipp: Du kannst die Zugangsdaten aus James' Nachricht mit Shift+Rechtsklick in das Chat-Fenster kopieren.
   Tipp: Man kann die Zugangsdaten aus James' Nachricht mit Shift+Rechtsklick in das Chat-Fenster kopieren.


=== MyChannel ===
=== MyChannel ===


Nach dem Einloggen sollte sich automatisch das [[MyChannel]]-Edit Fenster öffnen. Ansonsten gib '''/mychannel''' ein.<br>
Nach dem Einloggen sollte sich automatisch das [[MyChannel]]-Edit Fenster öffnen. Ansonsten gibt man '''/mychannel''' ein.<br>
Du legst dir jetzt einen eigenen Channel an, in dem du gleich deine erste UserApp installieren wirst. Eine Info zu den Einstellungen erhältst du durch Klicken auf den Titel des jeweiligen Feldes. Außer über deinen Channel-Namen musst du dir aber erstmal keine Gedanken machen (du kannst dieses Fenster jederzeit wieder mit '''/mychannel''' öffnen). Drücke anschließend auf '''Speichern''' und '''Schließen''' und betritt deinen MyChannel mit '''/go <dein eigener Channel-Name>'''.
Man legt sich jetzt einen eigenen Channel an, in dem man gleich die erste UserApp installieren wird. Eine Info zu den Einstellungen erhält man durch Klicken auf den Titel des jeweiligen Feldes. Außer über den Channel-Namen muss man sich aber erstmal keine Gedanken machen (man kann dieses Fenster jederzeit wieder mit '''/mychannel''' öffnen). Man drückt anschließend auf '''Speichern''' und '''Schließen''' und betritt den MyChannel mit '''/go <eigener Channel-Name>'''.


=== Installation der UserApp ===
=== Installation der UserApp ===


Für dieses Tutorial haben wir dir schon Dateien für eine Beispiel-UserApp namens "HeyThere" auf den Server geladen. Installiere diese UserApp in deinem MyChannel mit '''/apps install HeyThere'''. Du kannst die UserApp später wieder aus deinem Channel löschen.<br>
Für dieses Tutorial hat man schon Dateien für eine Beispiel-UserApp namens "HeyThere" auf den Server geladen. Man installiert diese UserApp in dem MyChannel mit '''/apps install HeyThere'''. Man kann die UserApp später wieder aus dem Channel löschen.<br>


Es müsste sich nun automatisch das Konfigurationsfenster für die UserApp geöffnet haben. Ansonsten öffne es selbst mit  '''/apps''' und klicke auf den Namen der UserApp ("HeyThere").
Es müsste sich nun automatisch das Konfigurationsfenster für die UserApp geöffnet haben. Ansonsten öffnet man es eigenständig mit  '''/apps''' und klickt auf den Namen der UserApp ("HeyThere").
   Hinweis: Durch einen Bug kann es sein, dass das Fenster auf dem Entwicklungs-Server nichts anzeigt. Schließe es einfach und öffne es gleich nochmal mit '''/apps'''. Wir hoffen, diesen Bug bald beheben zu können.
   Hinweis: Durch einen Bug kann es sein, dass das Fenster auf dem Entwicklungs-Server nichts anzeigt. Man schließt es einfach und öffnet es gleich nochmal mit '''/apps'''. Man hofft, diesen Bug bald beheben zu können.


Im Menüpunkt "AppBot" kannst du einen [[UserApp-Entwicklung/Doku/AppBot|AppBot]] erstellen und an deine UserApp binden. Ein AppBot ist ein bisschen wie [[James|Butler James]], nur eben für deine UserApp in deinem Channel. Drücke hierzu auf "hinzufügen" → "Nick anlegen", denk dir einen Nicknamen aus und bestätige.
Im Menüpunkt "AppBot" kann man einen [[UserApp-Entwicklung/Doku/AppBot|AppBot]] erstellen und an die UserApp binden. Ein AppBot ist ein bisschen wie [[James|Butler James]], nur eben für die UserApp in dem jeweiligen Channel. Man drückt hierzu auf "hinzufügen" → "Nick anlegen", denkt sich einen Nicknamen aus und bestätigt.


Starte jetzt deine erste UserApp.
Man startet jetzt die erste UserApp.
   Falls sich kein entsprechendes Fenster öffnet, starte die UserApp selbst, indem du im App-Menü auf '''aktivieren''' klickst.
   Falls sich kein entsprechendes Fenster öffnet, startet man die UserApp eigenständig, indem man im App-Menü auf '''aktivieren''' klickt.
Verlasse nun deinen Channel (indem du in einen anderen Channel gehst) und betritt ihn dann wieder (z.B. mit '''/go <dein eigener Channel-Name>'''). Dein AppBot sollte dich jetzt begrüßen!<br>
Man verlässt nun den Channel (indem man in einen anderen Channel geht) und betritt ihn dann wieder (z.B. mit '''/go <eigener Channel-Name>'''). Der AppBot sollte das Mitglied jetzt begrüßen!<br>


Um mit dem Entwickeln zu starten, mach mit dem nächsten Schritt weiter (FTP-Setup). Du kannst auch schon mal einen Blick in die [http://developer.knuddels.de/docs/ UserApps-API-Dokumentation] werfen.<br>
Um mit dem Entwickeln zu starten, macht man mit dem nächsten Schritt weiter (FTP-Setup). Man kann auch schon mal einen Blick in die [http://developer.knuddels.de/docs/ UserApps-API-Dokumentation] werfen.<br>


Bestimmt wird es auch mal eine Stelle geben, an der du nicht weiter weißt. Zögere nicht, [http://forum.knuddels.de/ubbthreads.php?ubb=postlist&Board=272&page=1 im Forum] Fragen zu stellen, wenn dir etwas nicht klar ist! Die anderen Entwickler sind freundlich, gehen fair miteinander um und helfen sich gerne gegenseitig.
Bestimmt wird es auch mal eine Stelle geben, an der man nicht weiter weiß. Zögert nicht, [http://forum.knuddels.de/ubbthreads.php?ubb=postlist&Board=272&page=1 im Forum] Fragen zu stellen, wenn mal etwas nicht klar ist! Die anderen Entwickler sind freundlich, gehen fair miteinander um und helfen sich gerne gegenseitig.


== FTP-Setup ==
== FTP-Setup ==


Du benötigst für die UserApp-Entwicklung ein FTP-Programm, um die Dateien für deine UserApp auf die Server von Knuddels hochzuladen.
Man benötigt für die UserApp-Entwicklung ein FTP-Programm, um die Dateien für die UserApp auf die Server von Knuddels hochzuladen.


=== Was ist eigentlich FTP? ===
=== Was ist eigentlich FTP? ===


FTP (File Transfer Protocol) ist ein Protokoll, mit dem Daten zwischen zwei Computern im Internet ausgetauscht werden können.<br>
FTP (File Transfer Protocol) ist ein Protokoll, mit dem Daten zwischen zwei Computern im Internet ausgetauscht werden können.<br>
Zum Glück gibt es ganz einfache Programme, die hinter den Kulissen dieses Protokoll sprechen, sodass du die Dateien mit wenigen Klicks hochladen kannst.
Zum Glück gibt es ganz einfache Programme, die hinter den Kulissen dieses Protokoll sprechen, sodass man die Dateien mit wenigen Klicks hochladen kann.


=== Einrichtung des FTP-Zugangs ===
=== Einrichtung des FTP-Zugangs ===


Du wirst die Dateien deiner UserApp auf zwei verschiedenen Servern hochladen:
Man wird die Dateien der UserApp auf zwei verschiedenen Servern hochladen:
# auf dem '''Entwicklungs-Server''', unter der URL '''devappupload.knuddels.de'''
# auf dem '''Entwicklungs-Server''', unter der URL '''devappupload.knuddels.de'''
# auf dem '''Live-Server''', unter der URL '''appupload.knuddels.de'''
# auf dem '''Live-Server''', unter der URL '''appupload.knuddels.de'''


Für beide Server musst du dir jeweils eine Verbindung einrichten. Dafür brauchst du ein FTP-Programm.
Für beide Server muss man sich jeweils eine Verbindung einrichten. Dafür braucht man ein FTP-Programm.
Schau dir dazu [https://bitbucket.org/knuddels/user-apps/wiki/Bootstrap/FTP-Setup diese Erklärung] an.<br>
Man schaut sich dazu [https://bitbucket.org/knuddels/user-apps/wiki/Bootstrap/FTP-Setup diese Erklärung] an.<br>
'''Diese Erklärung zeigt allerdings nur die Verbindung zum Live-Server''' - verwende für den Entwicklungs-Server stattdessen die URL '''devappupload.knuddels.de'''.<br>
'''Diese Erklärung zeigt allerdings nur die Verbindung zum Live-Server''' - verwendet für den Entwicklungs-Server stattdessen die URL '''devappupload.knuddels.de'''.<br>


Als Zugangsdaten verwendest du die Zugangsdaten, die James dir geschickt hat ('''FTP-Nutzer''' und '''FTP-Passwort''').
Als Zugangsdaten verwendet man die Zugangsdaten, die James einem geschickt hat ('''FTP-Nutzer''' und '''FTP-Passwort''').


   Tipp: Du kannst die Zugangsdaten aus James' Nachricht mit Shift+Rechtsklick in das Chat-Fenster kopieren.
   Tipp: Man kann die Zugangsdaten aus James' Nachricht mit Shift+Rechtsklick in das Chat-Fenster kopieren.
   Unter '''/apps developer''' kannst du sie außerdem erneut anfordern.
   Unter '''/apps developer''' kann man sie außerdem erneut anfordern.


Achte außerdem jeweils darauf, eine '''unverschlüsselte Verbindung''' zu wählen.
Achtet außerdem jeweils darauf, eine '''unverschlüsselte Verbindung''' zu wählen.


== Beispiel-Code anschauen ==
== Beispiel-Code anschauen ==


Wenn du weißt, wie du Dateien über den FTP-Zugang von dem Server herunter- und hochladen kannst, kannst du dir jetzt anschauen, wie eine UserApp aufgebaut ist.<br>
Wenn man weiß, wie man Dateien über den FTP-Zugang von dem Server herunter- und hochladen kann, kann man sich jetzt anschauen, wie eine UserApp aufgebaut ist.<br>


Logge dich in deinem FTP-Programm auf dem Entwicklungs-Server ein, navigiere in den Ordner '''ftp → HeyThere''' und lade dort die Datei '''main.js''' herunter. Du kannst diese Datei jetzt anschauen, verändern und dann wieder dort hochladen. So verstehst du, wie alles funktioniert.<br>
Man loggt sich hierzu in dem FTP-Programm auf dem Entwicklungs-Server ein, navigiert in den Ordner '''ftp → HeyThere''' und lädt dort die Datei '''main.js''' herunter. Man kann diese Datei jetzt anschauen, verändern und dann wieder dort hochladen. So versteht man, wie alles funktioniert.<br>


Die '''main.js''' kannst du sogar im normalen Texteditor anschauen und bearbeiten.<br>
Die '''main.js''' kann man sogar im normalen Texteditor anschauen und bearbeiten.<br>
Empfehlenswert ist das aber nicht.
Empfehlenswert ist das aber nicht.
*Auf Windows kannst du dir (zum Beispiel) [http://notepad-plus-plus.org/ Notepad++] herunterladen.
*Auf Windows kann man sich (zum Beispiel) [http://notepad-plus-plus.org/ Notepad++] herunterladen.
* Auf macOS kannst du dir (zum Beispiel) [https://itunes.apple.com/de/app/textwrangler/id404010395?mt=12 Textwrangler] herunterladen.
* Auf macOS kann man sich (zum Beispiel) [https://itunes.apple.com/de/app/textwrangler/id404010395?mt=12 Textwrangler] herunterladen.
Diese Programme können dir das Entwickeln erleichtern. (Natürlich kannst du auch eine IDE verwenden, wenn du dich damit auskennst.)<br>
Diese Programme können einem das Entwickeln erleichtern. (Natürlich kann man auch eine IDE verwenden, wenn man sich damit auskennt.)<br>


Schau dir den Code jetzt an und nimm einige Veränderungen vor.
Man schaut sich den Code jetzt an und nimmt einige Veränderungen vor.


   Idee: Lass deinen AppBot Besucher abhängig von ihrem Geschlecht begrüßen! Zum Beispiel männliche Besucher mit "Hey Prinz <Nickname>" und weibliche Besucher mit "Hey Prinzessin <Nickname>". Findest du heraus, wie das geht?
   Idee: Lass den AppBot Besucher abhängig von ihrem Geschlecht begrüßen! Zum Beispiel männliche Besucher mit "Hey Prinz <Nickname>" und weibliche Besucher mit "Hey Prinzessin <Nickname>".  


→ Jetzt ist ein guter Zeitpunkt, die [https://developer.knuddels.de/docs/ API-Dokumentation] anzuschauen.
→ Jetzt ist ein guter Zeitpunkt, die [https://developer.knuddels.de/docs/ API-Dokumentation] anzuschauen.
Der Aufbau der '''main.js''' wird [https://bitbucket.org/knuddels/user-apps/wiki/Bootstrap/App-Erstellen hier] erklärt.
Der Aufbau der '''main.js''' wird [https://bitbucket.org/knuddels/user-apps/wiki/Bootstrap/App-Erstellen hier] erklärt.


Gehe danach folgendermaßen vor:
Man geht danach folgendermaßen vor:
# Verändere die Datei und speichere sie.
# Man verändert die Datei und speichert sie.
# Lade die Datei auf den FTP-Server hoch (ersetze die alte '''main.js''').
# Man lädt die Datei auf den FTP-Server hoch (ersetzt die alte '''main.js''').
# Öffne das App-Menü in deinem Channel mit '''/apps''' und drücke auf '''update/restart'''. Deine App fährt herunter und startet nach wenigen Sekunden erneut - mit deinem neuen Code.
# Man öffnet das App-Menü in dem Channel mit '''/apps''' und drückt auf '''update/restart'''. Die App fährt herunter und startet nach wenigen Sekunden erneut - mit dem neuen Code.


Im nächsten Schritt wird gezeigt, wie man Besucher abhängig von ihrem Geschlecht begrüßen kann.
Im nächsten Schritt wird gezeigt, wie man Besucher abhängig von ihrem Geschlecht begrüßen kann.
Zeile 99: Zeile 99:




== Begrüße Besucher abhängig von ihrem Geschlecht ==
== Begrüßt Besucher abhängig von ihrem Geschlecht ==


So kannst du neuen Besuchern eine Begrüßungsnachricht abhängig von ihrem Geschlecht schicken:
So kann man neuen Besuchern eine Begrüßungsnachricht abhängig von ihrem Geschlecht schicken:


'''main.js'''
'''main.js'''
Zeile 129: Zeile 129:
</pre>
</pre>


Schaffst du es außerdem, die Besucher sowohl abhängig von ihrem Alter, als auch von ihrem Geschlecht zu begrüßen?   
Schafft man es außerdem, die Besucher sowohl abhängig von ihrem Alter, als auch von ihrem Geschlecht zu begrüßen?   
→ Begrüße Besucher...
→ Begrüße Besucher...
* unter 18 Jahren mit: '''"Hallo Junge <Nickname>"''' bzw. '''"Hallo Mädchen <Nickname>"'''
* unter 18 Jahren mit: '''"Hallo Junge <Nickname>"''' bzw. '''"Hallo Mädchen <Nickname>"'''
Zeile 135: Zeile 135:
* über 60 Jahren mit: '''"Hallo Opa <Nickname>"''' bzw. '''"Hallo Oma <Nickname>"'''
* über 60 Jahren mit: '''"Hallo Opa <Nickname>"''' bzw. '''"Hallo Oma <Nickname>"'''


Schau in die [https://developer.knuddels.de/docs/ UserApps-API-Dokumentation], wenn du eine Funktion suchst.
Man schaut in die [https://developer.knuddels.de/docs/ UserApps-API-Dokumentation], wenn man eine Funktion sucht.
Den fertigen Code kannst du dir hier herunterladen: [https://bitbucket.org/knuddels/user-apps/downloads/Beispielcode%20HeyThere%20-%20Stufe%202%20-%20Erweiterung.zip Begrüßung nach Alter und Geschlecht]<br>
Den fertigen Code kann man sich hier herunterladen: [https://bitbucket.org/knuddels/user-apps/downloads/Beispielcode%20HeyThere%20-%20Stufe%202%20-%20Erweiterung.zip Begrüßung nach Alter und Geschlecht]<br>


Im nächsten Schritt lernst du, wie Besucher '''Knuddel''' an deinen AppBot transferieren können!
Im nächsten Schritt lernt man, wie Besucher '''Knuddel''' an den AppBot transferieren können!


== Knuddel überweisen ==
== Knuddel überweisen ==


Nutzer können Knuddel an deinen AppBot überweisen. Diese Knuddel kannst du dir dann später auf deinen eigenen Nick überweisen lassen. Hier lernst du, wie du das in deiner UserApp machen kannst.
Mitglieder können Knuddel an den AppBot überweisen. Diese Knuddel kann man sich dann später auf den eigenen Nick überweisen lassen. Hier lernt man, wie man das in der UserApp machen kann.


Der AppBot soll jeden neuen Nutzer nach einem Knuddel fragen. Wenn er diesen bekommt, bedankt er sich bei dem Nutzer.
Der AppBot soll jedes neues Mitglied nach einem Knuddel fragen. Wenn er diesen bekommt, bedankt er sich bei dem Mitglied.


   Auf dem Entwicklungs-Server hat dein Nick so viele Knuddel, dass du das einfach testen kannst.
   Auf dem Entwicklungs-Server hat der Nick so viele Knuddel, dass man das einfach testen kann.


'''main.js'''
'''main.js'''
Zeile 166: Zeile 166:
=== Erklärung: Was ist KCode? ===
=== Erklärung: Was ist KCode? ===


In '''App.onUserJoined''' wird dem Nutzer eine Nachricht mit seltsamen Zeichen gesendet:   
In '''App.onUserJoined''' wird dem Mitglied eine Nachricht mit seltsamen Zeichen gesendet:   


   "Gibst du mir _°BB°°>_heinen Knuddel|/appknuddel " + appBotNick.escapeKCode() + "<°°°_?"
   "Gibst du mir _°BB°°>_heinen Knuddel|/appknuddel " + appBotNick.escapeKCode() + "<°°°_?"


Das ist [[Formatierungen|KCode]]. Dieser Code wird vor dem Anzeigen umgewandelt, sodass die Nutzer einen Link präsentiert bekommen, auf dessen Klick hin ein Befehl ausgeführt wird: Hier ist dieser Befehl '''/appknuddel <Nickname des AppBots>'''. Mit dem Klicken auf den Link überweist der Nutzer also einen Knuddel an den AppBot.
Das ist [[Formatierungen|KCode]]. Dieser Code wird vor dem Anzeigen umgewandelt, sodass die Mitglieder einen Link präsentiert bekommen, auf dessen Klick hin ein Befehl ausgeführt wird: Hier ist dieser Befehl '''/appknuddel <Nickname des AppBots>'''. Mit dem Klicken auf den Link überweist das Mitglied also einen Knuddel an den AppBot.


'''appBotNick.escapeKCode()''' dient dazu, dass der Befehl auch bei Sonderzeichen im Nicknamen deines AppBots richtig ausgeführt wird.
'''appBotNick.escapeKCode()''' dient dazu, dass der Befehl auch bei Sonderzeichen im Nicknamen des AppBots richtig ausgeführt wird.


[[Formatierungen|→ Hier kannst du dir anschauen, wie KCode funktioniert.]]
[[Formatierungen|→ Hier kann man sich anschauen, wie KCode funktioniert.]]


   Idee für wahre Kapitalisten: Du kannst den Besucher deines Channels vielleicht dazu bringen, dem AppBot einen Knuddel zu schenken, wenn der AppBot dem Besucher nach einiger Zeit eine traurige Nachricht schreibt, falls er bis dahin keinen Knuddel von dem Besucher erhalten hat.
   Idee für wahre Kapitalisten: Man kann den Besucher des Channels vielleicht dazu bringen, dem AppBot einen Knuddel zu schenken, wenn der AppBot dem Besucher nach einiger Zeit eine traurige Nachricht schreibt, falls er bis dahin keinen Knuddel von dem Besucher erhalten hat.


Eine mögliche Lösung dieses Problems kannst du dir hier anschauen: [https://bitbucket.org/knuddels/user-apps/downloads/Beispielcode%20HeyThere%20-%20Stufe%203%20-%20Erweiterung.zip Download Code-Beispiel (Traurige Nachricht vom AppBot)]<br>
Eine mögliche Lösung dieses Problems kann man sich hier anschauen: [https://bitbucket.org/knuddels/user-apps/downloads/Beispielcode%20HeyThere%20-%20Stufe%203%20-%20Erweiterung.zip Download Code-Beispiel (Traurige Nachricht vom AppBot)]<br>


Im nächsten Schritt lernst du, wie du dauerhaft Daten über deine Besucher speichern kannst.
Im nächsten Schritt lernt man, wie man dauerhaft Daten über die Besucher speichern kann.


== UserPersistence: Nutzerdaten speichern ==
== UserPersistence: Nutzerdaten speichern ==


Wenn du dir beispielsweise dauerhaft merken willst, wie viele Knuddel ein Nutzer jeweils schon deinem AppBot überwiesen hat, brauchst du eine Möglichkeit, zu jedem Nutzer eine Zahl zu speichern.<br>
Wenn man sich beispielsweise dauerhaft merken will, wie viele Knuddel ein Mitglied jeweils schon an den AppBot überwiesen hat, braucht man eine Möglichkeit, zu jedem Mitglied eine Zahl zu speichern.<br>


   Allerdings kannst du nicht einfach eine Variable in deinem Code haben, worüber du alles speicherst - das wäre nämlich mit jedem Neustart der App wieder weg.
   Allerdings kann man nicht einfach eine Variable in demCode haben, worüber man alles speichert - das wäre nämlich mit jedem Neustart der App wieder weg.


In der [https://developer.knuddels.de/docs/ UserApps-API] gibt es genau dafür das Objekt [https://developer.knuddels.de/docs/classes/UserPersistence.html UserPersistence].
In der [https://developer.knuddels.de/docs/ UserApps-API] gibt es genau dafür das Objekt [https://developer.knuddels.de/docs/classes/UserPersistence.html UserPersistence].
Zeile 217: Zeile 217:
</pre>
</pre>


Die App merkt sich nun, wie viele Knuddel deine Besucher bereits eingezahlt haben. Besonders gönnerische Besucher begrüßt er ehrerbietig!
Die App merkt sich nun, wie viele Knuddel die Besucher bereits eingezahlt haben. Besonders gönnerische Besucher begrüßt er ehrerbietig!


== Dein Fortschitt ==
== Der Fortschitt ==


'''Du bist schon weit gekommen!'''
'''Man ist schon weit gekommen!'''


* Du hast gelernt, wie man sich auf dem Entwicklungs-Server anmeldet und eine App installiert.
* Man hat gelernt, wie man sich auf dem Entwicklungs-Server anmeldet und eine App installiert.
* Du hast dich mit FTP vertraut gemacht und kannst deine Dateien jetzt einfach an den Knuddels-Server senden.
* Man hat sich mit FTP vertraut gemacht und kann die Dateien jetzt einfach an den Knuddels-Server senden.
* Du weißt jetzt, wie man auf verschiedene Events in deinem Channel reagiert.
* Man weiß jetzt, wie man auf verschiedene Events in dem Channel reagiert.
* Du bist mit der Überweisung von Knuddel an deinen AppBot vertraut.
* Man ist mit der Überweisung von Knuddel an den AppBot vertraut.
* Du kannst Daten über deine Besucher dauerhaft speichern.
* Man kann sich Daten über die Besucher dauerhaft speichern.


Jetzt kannst du deine UserApp mal veröffentlichen! Dazu musst du deine UserApp per FTP auf dem Live-Server hochladen - so wie schon vorher auf dem Entwicklungs-Server. Melde dich dann ganz normal bei Knuddels an und installiere deine UserApp mit '''/apps install <UserApp-Name>''' in deinem MyChannel.<br>
Jetzt kann man die UserApp mal veröffentlichen! Dazu muss man die UserApp per FTP auf dem Live-Server hochladen - so wie schon vorher auf dem Entwicklungs-Server. Hierzu meldet man sich dann ganz normal bei Knuddels an und installiert die UserApp mit '''/apps install <UserApp-Name>''' in dem jeweiligen MyChannel.<br>


Und wenn du jetzt noch deinen MyChannel unter '''/mychannel''' veröffentlichst, können auch andere Nutzer zufällig auf deinen MyChannel stoßen.<br>
Und wenn man jetzt noch den MyChannel unter '''/mychannel''' veröffentlicht, können auch andere Mitglieder zufällig auf den MyChannel stoßen.<br>


== Wie geht's weiter? ==
== Wie geht's weiter? ==


Vielleicht hast du Lust, ein grafisches Spiel zu programmieren? Oder ein textbasiertes RPG?<br>
Vielleicht hat man nun Lust, ein grafisches Spiel zu programmieren? Oder ein textbasiertes RPG?<br>
Ab jetzt bist du dir selbst überlassen - und kannst dich natürlich jederzeit an die Community wenden.<br>
Ab jetzt ist man sich selbst überlassen - und man kann sich natürlich jederzeit an die Community wenden.<br>
Auf dem Entwickler-Portal [https://developer.knuddels.de/ developer.knuddels.de] findest du das meiste im Zusammenhang mit UserApps.
Auf dem Entwickler-Portal [https://developer.knuddels.de/ developer.knuddels.de] findet man das meiste im Zusammenhang mit UserApps.


[[UserApp-Entwicklung|→ Übersicht: UserApp-Entwicklung]]
[[UserApp-Entwicklung|→ Übersicht: UserApp-Entwicklung]]


[[Kategorie:UserApp-Entwicklung]]
[[Kategorie:UserApp-Entwicklung]]

Version vom 3. Oktober 2021, 17:35 Uhr

Einleitung

In diesem Tutorial lernst du Schritt für Schritt, deine erste UserApp zu programmieren.
Hier geht es darum, erstmal alles zum Laufen zu bringen und ein paar Basics zu vermitteln, sodass ab dann selbstständig weiterentwickelt werden kann.

Bevor es losgeht

Entwickler werden

Man stellt sicher, dass man ein Entwickler ist. Man gibt dazu /apps developer im Chat ein und erfüllt die Kriterien, falls man das noch nicht getan hat.

Verwende die Desktop-App

Wir empfehlen stark, zum Entwickeln die Desktop-App auf dem Computer zu verwenden. Man kann die App hier herunterladen.

Die erste UserApp

Entwicklungs-Server

Das Entwickeln beginnt auf dem Entwicklungs-Server. Man gibt /apps developer ein und wählt den Punkt Login auf Entwicklungs-Server aus. Jetzt sollte eine Desktop-Verknüpfung für den Login auf dem Entwicklungs-Server angelegt worden sein.
Wenn man Knuddels über diese Verknüpfung startet, landet man nach dem Login auf dem Entwicklungs-Server. Hier kann man später in Ruhe an der UserApp tüfteln, bevor man die Änderungen auf dem Live-Server hochlädt.

Man loggt sich jetzt mit den Zugangsdaten auf dem Entwicklungsserver ein, die James gesendet hat (Entwickler-Nick und Entwickler-Passwort).

 Tipp: Man kann die Zugangsdaten aus James' Nachricht mit Shift+Rechtsklick in das Chat-Fenster kopieren.

MyChannel

Nach dem Einloggen sollte sich automatisch das MyChannel-Edit Fenster öffnen. Ansonsten gibt man /mychannel ein.
Man legt sich jetzt einen eigenen Channel an, in dem man gleich die erste UserApp installieren wird. Eine Info zu den Einstellungen erhält man durch Klicken auf den Titel des jeweiligen Feldes. Außer über den Channel-Namen muss man sich aber erstmal keine Gedanken machen (man kann dieses Fenster jederzeit wieder mit /mychannel öffnen). Man drückt anschließend auf Speichern und Schließen und betritt den MyChannel mit /go <eigener Channel-Name>.

Installation der UserApp

Für dieses Tutorial hat man schon Dateien für eine Beispiel-UserApp namens "HeyThere" auf den Server geladen. Man installiert diese UserApp in dem MyChannel mit /apps install HeyThere. Man kann die UserApp später wieder aus dem Channel löschen.

Es müsste sich nun automatisch das Konfigurationsfenster für die UserApp geöffnet haben. Ansonsten öffnet man es eigenständig mit /apps und klickt auf den Namen der UserApp ("HeyThere").

 Hinweis: Durch einen Bug kann es sein, dass das Fenster auf dem Entwicklungs-Server nichts anzeigt. Man schließt es einfach und öffnet es gleich nochmal mit /apps. Man hofft, diesen Bug bald beheben zu können.

Im Menüpunkt "AppBot" kann man einen AppBot erstellen und an die UserApp binden. Ein AppBot ist ein bisschen wie Butler James, nur eben für die UserApp in dem jeweiligen Channel. Man drückt hierzu auf "hinzufügen" → "Nick anlegen", denkt sich einen Nicknamen aus und bestätigt.

Man startet jetzt die erste UserApp.

 Falls sich kein entsprechendes Fenster öffnet, startet man die UserApp eigenständig, indem man im App-Menü auf aktivieren klickt.

Man verlässt nun den Channel (indem man in einen anderen Channel geht) und betritt ihn dann wieder (z.B. mit /go <eigener Channel-Name>). Der AppBot sollte das Mitglied jetzt begrüßen!

Um mit dem Entwickeln zu starten, macht man mit dem nächsten Schritt weiter (FTP-Setup). Man kann auch schon mal einen Blick in die UserApps-API-Dokumentation werfen.

Bestimmt wird es auch mal eine Stelle geben, an der man nicht weiter weiß. Zögert nicht, im Forum Fragen zu stellen, wenn mal etwas nicht klar ist! Die anderen Entwickler sind freundlich, gehen fair miteinander um und helfen sich gerne gegenseitig.

FTP-Setup

Man benötigt für die UserApp-Entwicklung ein FTP-Programm, um die Dateien für die UserApp auf die Server von Knuddels hochzuladen.

Was ist eigentlich FTP?

FTP (File Transfer Protocol) ist ein Protokoll, mit dem Daten zwischen zwei Computern im Internet ausgetauscht werden können.
Zum Glück gibt es ganz einfache Programme, die hinter den Kulissen dieses Protokoll sprechen, sodass man die Dateien mit wenigen Klicks hochladen kann.

Einrichtung des FTP-Zugangs

Man wird die Dateien der UserApp auf zwei verschiedenen Servern hochladen:

  1. auf dem Entwicklungs-Server, unter der URL devappupload.knuddels.de
  2. auf dem Live-Server, unter der URL appupload.knuddels.de

Für beide Server muss man sich jeweils eine Verbindung einrichten. Dafür braucht man ein FTP-Programm. Man schaut sich dazu diese Erklärung an.
Diese Erklärung zeigt allerdings nur die Verbindung zum Live-Server - verwendet für den Entwicklungs-Server stattdessen die URL devappupload.knuddels.de.

Als Zugangsdaten verwendet man die Zugangsdaten, die James einem geschickt hat (FTP-Nutzer und FTP-Passwort).

 Tipp: Man kann die Zugangsdaten aus James' Nachricht mit Shift+Rechtsklick in das Chat-Fenster kopieren.
 Unter /apps developer kann man sie außerdem erneut anfordern.

Achtet außerdem jeweils darauf, eine unverschlüsselte Verbindung zu wählen.

Beispiel-Code anschauen

Wenn man weiß, wie man Dateien über den FTP-Zugang von dem Server herunter- und hochladen kann, kann man sich jetzt anschauen, wie eine UserApp aufgebaut ist.

Man loggt sich hierzu in dem FTP-Programm auf dem Entwicklungs-Server ein, navigiert in den Ordner ftp → HeyThere und lädt dort die Datei main.js herunter. Man kann diese Datei jetzt anschauen, verändern und dann wieder dort hochladen. So versteht man, wie alles funktioniert.

Die main.js kann man sogar im normalen Texteditor anschauen und bearbeiten.
Empfehlenswert ist das aber nicht.

  • Auf Windows kann man sich (zum Beispiel) Notepad++ herunterladen.
  • Auf macOS kann man sich (zum Beispiel) Textwrangler herunterladen.

Diese Programme können einem das Entwickeln erleichtern. (Natürlich kann man auch eine IDE verwenden, wenn man sich damit auskennt.)

Man schaut sich den Code jetzt an und nimmt einige Veränderungen vor.

 Idee: Lass den AppBot Besucher abhängig von ihrem Geschlecht begrüßen! Zum Beispiel männliche Besucher mit "Hey Prinz <Nickname>" und weibliche Besucher mit "Hey Prinzessin <Nickname>". 

→ Jetzt ist ein guter Zeitpunkt, die API-Dokumentation anzuschauen. Der Aufbau der main.js wird hier erklärt.

Man geht danach folgendermaßen vor:

  1. Man verändert die Datei und speichert sie.
  2. Man lädt die Datei auf den FTP-Server hoch (ersetzt die alte main.js).
  3. Man öffnet das App-Menü in dem Channel mit /apps und drückt auf update/restart. Die App fährt herunter und startet nach wenigen Sekunden erneut - mit dem neuen Code.

Im nächsten Schritt wird gezeigt, wie man Besucher abhängig von ihrem Geschlecht begrüßen kann.


Begrüßt Besucher abhängig von ihrem Geschlecht

So kann man neuen Besuchern eine Begrüßungsnachricht abhängig von ihrem Geschlecht schicken:

main.js

var App = (new function() {

    this.onUserJoined = function(user) {  // diese Funktion wird aufgerufen, wenn ein Nutzer den Channel betritt

        let gender = user.getGender();
        let nick  = user.getNick();
        let title;

        if (gender == Gender.Male) {
            title = "Prinz " + nick;
        } else if (gender == Gender.Female) {
            title = "Prinzessin " + nick;
        } else {  // der Nutzer hat sich nicht als männlich oder weiblich ausgegeben
            title = nick;
        }

        let message = "Hey " + title + ", willkommen im Channel! Du bist " + user.getAge() + " Jahre alt.";
        user.sendPrivateMessage(message);  // der AppBot sendet eine private Nachricht an den Nutzer
    }
}());

Schafft man es außerdem, die Besucher sowohl abhängig von ihrem Alter, als auch von ihrem Geschlecht zu begrüßen? → Begrüße Besucher...

  • unter 18 Jahren mit: "Hallo Junge <Nickname>" bzw. "Hallo Mädchen <Nickname>"
  • zwischen 18 und 60 Jahren mit: "Hallo Herr <Nickname>" bzw. "Hallo Frau <Nickname>"
  • über 60 Jahren mit: "Hallo Opa <Nickname>" bzw. "Hallo Oma <Nickname>"

Man schaut in die UserApps-API-Dokumentation, wenn man eine Funktion sucht. Den fertigen Code kann man sich hier herunterladen: Begrüßung nach Alter und Geschlecht

Im nächsten Schritt lernt man, wie Besucher Knuddel an den AppBot transferieren können!

Knuddel überweisen

Mitglieder können Knuddel an den AppBot überweisen. Diese Knuddel kann man sich dann später auf den eigenen Nick überweisen lassen. Hier lernt man, wie man das in der UserApp machen kann.

Der AppBot soll jedes neues Mitglied nach einem Knuddel fragen. Wenn er diesen bekommt, bedankt er sich bei dem Mitglied.

 Auf dem Entwicklungs-Server hat der Nick so viele Knuddel, dass man das einfach testen kann.

main.js

var App = (new function() {

    this.onUserJoined = function(user) {
        var appBotNick = KnuddelsServer.getDefaultBotUser().getNick();
        var message = "Gibst du mir _°BB°°>_heinen Knuddel|/appknuddel " + appBotNick.escapeKCode() + "<°°°_?";
        user.sendPrivateMessage(message);
    }

    this.onKnuddelReceived = function(sender, receiver, knuddelAmount, transferReason) {
        sender.sendPrivateMessage("Danke, " + sender.getNick() + "!");
    }
}());

Erklärung: Was ist KCode?

In App.onUserJoined wird dem Mitglied eine Nachricht mit seltsamen Zeichen gesendet:

 "Gibst du mir _°BB°°>_heinen Knuddel|/appknuddel " + appBotNick.escapeKCode() + "<°°°_?"

Das ist KCode. Dieser Code wird vor dem Anzeigen umgewandelt, sodass die Mitglieder einen Link präsentiert bekommen, auf dessen Klick hin ein Befehl ausgeführt wird: Hier ist dieser Befehl /appknuddel <Nickname des AppBots>. Mit dem Klicken auf den Link überweist das Mitglied also einen Knuddel an den AppBot.

appBotNick.escapeKCode() dient dazu, dass der Befehl auch bei Sonderzeichen im Nicknamen des AppBots richtig ausgeführt wird.

→ Hier kann man sich anschauen, wie KCode funktioniert.

 Idee für wahre Kapitalisten: Man kann den Besucher des Channels vielleicht dazu bringen, dem AppBot einen Knuddel zu schenken, wenn der AppBot dem Besucher nach einiger Zeit eine traurige Nachricht schreibt, falls er bis dahin keinen Knuddel von dem Besucher erhalten hat.

Eine mögliche Lösung dieses Problems kann man sich hier anschauen: Download Code-Beispiel (Traurige Nachricht vom AppBot)

Im nächsten Schritt lernt man, wie man dauerhaft Daten über die Besucher speichern kann.

UserPersistence: Nutzerdaten speichern

Wenn man sich beispielsweise dauerhaft merken will, wie viele Knuddel ein Mitglied jeweils schon an den AppBot überwiesen hat, braucht man eine Möglichkeit, zu jedem Mitglied eine Zahl zu speichern.

 Allerdings kann man nicht einfach eine Variable in demCode haben, worüber man alles speichert - das wäre nämlich mit jedem Neustart der App wieder weg.

In der UserApps-API gibt es genau dafür das Objekt UserPersistence.

main.js

var App = (new function() {

    this.onUserJoined = function(user) {

        let userPersistence = user.getPersistence();
        let userSpending = userPersistence.getNumber("spending", 0);

        if (userSpending > 10) {
            user.sendPrivateMessage("Willkommen, gütiger Spender!");
        }

        var appBotNick = KnuddelsServer.getDefaultBotUser().getNick();
        var message = "Gibst du mir _°BB°°>_heinen Knuddel|/appknuddel " + appBotNick.escapeKCode() + "<°°°_?";
        user.sendPrivateMessage(message);
    }

    this.onKnuddelReceived = function(sender, receiver, knuddelAmount, transferReason) {
        sender.sendPrivateMessage("Danke, " + sender.getNick() + "!");

        let userPersistence = sender.getPersistence();
        userPersistence.addNumber("spending", knuddelAmount.asNumber());
    }
}());

Die App merkt sich nun, wie viele Knuddel die Besucher bereits eingezahlt haben. Besonders gönnerische Besucher begrüßt er ehrerbietig!

Der Fortschitt

Man ist schon weit gekommen!

  • Man hat gelernt, wie man sich auf dem Entwicklungs-Server anmeldet und eine App installiert.
  • Man hat sich mit FTP vertraut gemacht und kann die Dateien jetzt einfach an den Knuddels-Server senden.
  • Man weiß jetzt, wie man auf verschiedene Events in dem Channel reagiert.
  • Man ist mit der Überweisung von Knuddel an den AppBot vertraut.
  • Man kann sich Daten über die Besucher dauerhaft speichern.

Jetzt kann man die UserApp mal veröffentlichen! Dazu muss man die UserApp per FTP auf dem Live-Server hochladen - so wie schon vorher auf dem Entwicklungs-Server. Hierzu meldet man sich dann ganz normal bei Knuddels an und installiert die UserApp mit /apps install <UserApp-Name> in dem jeweiligen MyChannel.

Und wenn man jetzt noch den MyChannel unter /mychannel veröffentlicht, können auch andere Mitglieder zufällig auf den MyChannel stoßen.

Wie geht's weiter?

Vielleicht hat man nun Lust, ein grafisches Spiel zu programmieren? Oder ein textbasiertes RPG?
Ab jetzt ist man sich selbst überlassen - und man kann sich natürlich jederzeit an die Community wenden.
Auf dem Entwickler-Portal developer.knuddels.de findet man das meiste im Zusammenhang mit UserApps.

→ Übersicht: UserApp-Entwicklung