Ich backe eine Facebook App

Damit es in der Hallo Welt! nicht langweilig wird, haben wir uns kürzlich in einem Projekt der wilden Facebook-Welt gestellt. Die Mittelbayerische Zeitung hatte sich und uns die Aufgabe gegeben, zwei Veranstaltungen tagesaktuell zu begleiten und zusätzliche Funktionalität gegenüber der „normalen“ Fanpage bereit zu stellen.

Wie funktionieren Facebook Apps?

Grundsätzlich sind Facebook Apps als autonome Webseiten zu verstehen, die innerhalb von Facebook in einem iFrame eingebettet werden. Facebook und die Webseite werden gegenseitig bekannt gemacht, indem man auf Facebook die Adresse der Seite und dort wiederum einen geheimen Zahlencode der App für Facebook hinterlegt. Schon funktioniert die Kommunikation und ich kann von meiner App aus die relevanten Daten lesen. Wie man sowas genau einrichtet, ist vielerorts im Netz beschrieben, z.B. hier im Facebook App Tutorial. Wichtig ist, dass man sich einen Server zulegt, der ein gültiges SSL-Zertifikat besitzt. Facebook besteht auf einer sicheren Verbindung, und selbst gebaute Zertifikate werden hier nicht akzeptiert.

Um das Rad und wichtige Webseitenfunktionen und -standards nicht ständig neu erfinden zu müssen, haben wir uns entschlossen, auf ein Framework zu setzen. Unsere Wahl ist auf CakePHP gefallen. Es ist einigermaßen leichtgewichtig, schnell und intuitiv zu erlernen und bietet mit seinen Plugins einige interessante Features (in unserem Fall die Verbindung zum Facebook-SDK und das einfache Skalieren von Bildern).

Facebook selbst spricht man über die OpenGraph-API an. Die übernimmt z.B. die Authentifizierung des Nutzers oder das Posten auf der Timeline und wird serverseitig über das oben genannte Facebook PHP SDK gesteuert. Die dynamischen Elemente im Browser werden vom JavaScript-SDK übernommen.

Was haben wir gelernt?

Bei der Umsetzung der Apps haben wir einige Erfahrungen gemacht, die ich gerne weitergeben möchte.

Testen

So ist das Testen ist garnicht so einfach. Zwar kann man sich im Entwicklerbereich für die App eigene Testnutzer erzeugen, die App kann in den Sandbox-Modus versetzt werden und man kann Fanpages nur für eine ausgewählte Gruppe von Personen sichtbar machen. Aber der Teufel steckt im Detail: Testnutzern kann ich beispielsweise keinen exklusiven Zugang auf versteckte Fanseiten geben. Sie können auch nicht alle Aktionen durchführen, z.B. eine Fanseite liken. Wenn ich aber möchte, dass Besucher bestimmte Teile der App nur sehen können, wenn sie die Fanseite „mögen“, ist das hier nicht zu testen. Wir sind dann dazu übergegangen, die App mit echten Nutzern zu testen und haben die Reichweite der App auf „Nur ich“ eingeschränkt. Das ist nicht ideal, aber manchmal unumgänglich. Und Vorsicht bei lokalen Tests: Zwar ist eine Anmeldung von Facebook Nutzern auf localhost nicht möglich, aber mit den geeigneten Secret Keys ausgestattet kann man auch vom heimischen Rechner aus mit dem OpenGraph kommunizieren. Deshalb hat es sich bei uns als sehr gute Idee erwiesen, an vielerlei Stellen während der Testphase zusätzliche Schranken einzubauen, z.B. bei Posts auf die Timeline nochmal sicherheitshalber auf Testnutzer zu beschränken…

Performanz

In der Entwicklungsphase fallen OpenGraph-Abfragen performanztechnisch nicht so sehr ins Gewicht, da sie nicht zu häufig passieren. Aber jede Abfrage dauert bis zu einer Sekunde. Daher ändert sich die Auswirkung auf die Performanz schlagartig, wenn man mehrere Benutzer oder viele Daten auf der Seite hat. So wollten wir für jeden Post auf unserer App-Timeline die Anzahl der Kommentare wissen. Dank CakePHP war es einfach, hierfür einen Caching-Mechanismus einzuführen. Wir rufen scriptgesteuert die Information jetzt in festgelegten Intervallen von Facebook auf und haben bei der Darstellung der Seite die Daten schon im Cache. Die Auswirkungen dieser Umstellung auf die Performanz waren ungemein positiv. Das geht natürlich nur bei Daten, die sich nicht nutzerspezifisch bei jedem Aufruf ändern.

Nicht gegen Facebook entwickeln

Immer wieder tauchen Fragen oder Umsetzungswünsche auf, die nicht direkt von Facebook und den ganzen SDKs und APIs unterstützt werden. Ich bin es als Open Source Entwickler gewöhnt, dass im Prinzip jeder Wunsch erfüllbar ist. Man hat ja Zugriff auf den gesamten Code beispielsweise von MediaWiki. Hier ist es anders. Leider geben mir die Facebook-Entwickler nicht die Möglichkeit, schnell mal einen Patch in ihre Plattform einzubauen 😉 . Anders gesagt: mache Dinge gehen einfach nicht auf Facebook. Ich habe lernen müssen, das zu akzeptieren, auch wenn es schwer fällt. Ein Beispiel: ich wollte alle Fotos finden, die mit einem bestimmten Ort verknüpft sind. Nun sind diese Daten in einer Tabelle, die ich sogar per FQL (einer Abfragesprache von Facebook) abgreifen kann. Aber FQL ist so konfiguriert, dass ich zwar alle Fotos eines Nutzers finden kann und mir dort auch die Orte mit dazugegeben werden. Ich kann die Frage aber nicht so stellen, dass ich alle Fotos zu einem Ort finden kann und die Nutzer finde. Ich habe viel Zeit damit verbracht, nach Workarounds für solch vermeintlich trivialen Aufgabestellungen zu suchen, aber häufig mit mäßigem Erfolg. Facebook hat einfach bestimmte Vorstellungen, wie die Interaktionen und Abfragen laufen müssen. An der Stelle ist es häufig zielführend, einen Schritt zurückzugehen und sich nach dem Sinn einer bestimmten Anforderung zu fragen. Dann kann man versuchen, die Möglichkeiten von Facebook in diesem Sinn auszunutzen.

Fazit

Auch wenn die Erstellung von Apps sehr nahe am Programmieren eigenständiger Webanwendungen dran ist, muss man sich auf eine neue Philosophie einlassen. Ich musste machmal meine Intuition zurechtrücken oder ungewöhnliche Pfade einschlagen, um zum Ziel zu kommen. Aber die Mühe lohnt sich: es ist ein erhebender Moment, wenn man sieht, wie sich die App in die viralen Nachrichtenwelt von Facebook einfügt 🙂

 

Dies könnte Ihnen auch gefallen

1 Kommentar

  • Trinette

    15. Juni 2012

    Facebook gibt einem in der Tat enge Grenzen vor, die vor allem durch eigene vorhandenen oder nicht vorhanden Ethikvorstellungen bzw. Visionen der erwünschten Kommunikationsformen bestimmt wird. Schwierig sich damit abzufinden.

    Replay

Schreiben Sie einen Kommentar