Even More Socialized

Facebook.NET
Kommentare

Seit Anbeginn des so genannten Webs 2.0 haben sich zahlreiche Communitys, in der Fachsprache Social Networks genannt, gebildet. Sie haben sich darauf spezialisiert, die Technologien des „neuen Webs“ bestmöglich zu nutzen. Die ständige Weiterentwicklung solcher Netzwerke führte zu einem sprichwörtlichen Feuerwerk an neuen Trends und Features, wie bspw. Instant-Messages, Live-Feeds und Social Games, um nur einige zu nennen. Im deutschsprachigen Raum sind die populärsten Vertreter unter anderem StudiVZ, MeinVZ sowie XING, während global betrachtet Facebook durchaus als das erfolgreichste und beliebtestes Social Network bezeichnet werden kann. Dieser Artikel zeigt Ihnen, wie Sie Ihre Anwendungen mit dem Microsoft .NET Framework an Facebook anbinden und welche völlig neuen Möglichkeiten sich dadurch für Sie und Ihre Applikationen ergeben könnten – Erleben Sie Facebook.NET.

Zweifelsohne haben die zahlreichen Social Networks, die sich über die letzten Monate und Jahre etabliert haben, den Onlinealltag nachhaltig verändert. Für die meisten von uns ist es ganz selbstverständlich, Tag für Tag private Nachrichten in zahlreichen sozialen Netzwerken zu lesen, Geschenke in virtuellen Social Games zu verteilen und Gedanken über Livekommentare, sei es zu Bildern aber auch Videos, auszutauschen. Noch nie war das Bedürfnis, mitzuteilen, was man gerade macht oder wo man sich gerade befindet, so groß wie heute. Während sich twitter.com ausschließlich darauf spezialisiert hat, Statusmeldungen zu ermöglichen, ist diese Funktionalität im Rahmen von Social Networks längst eine Selbstverständlichkeit. Aber nicht nur das Onlineleben wurde durch die Social Networks und die damit verbundenen neuen Möglichkeiten verändert, sondern auch das reale Leben wurde zunehmend beeinflusst. In der Zwischenzeit gestatten bspw. zahlreiche TV-Sendungen die interaktive Teilnahme am Programm – vorzugsweise passiert dies über so genannte Live-Feeds, die die Mitglieder innerhalb der sozialen Netzwerke absenden können. Die zuständige Redaktion bindet diese dann direkt in das Sendeprogramm mit ein. Ein anderes Beispiel ist die Weiterempfehlung verschiedenster Internetseiten über die eigene Profilseite, ähnlich dem Grundgedanken von Diensten wie digg.com. Auch Features wie eigene Instant-Messaging-Kanäle zählen längst zur Basisfunktionalität. Während wir uns im ersten Teil dieser zweiteiligen Artikelserie ausschließlich mit dem Internetdienst twitter.com beschäftigt haben, fokussiert dieser Artikel die Anbindung von eigenen Applikationen an das populäre Social Network Facebook. Außerdem werden Sie erfahren, welche Dienste für Entwickler angeboten werden und wie Sie Ihre Anwendungen im Handumdrehen etwas „sozialer“ gestalten.

Über Facebook

Mit rund 400 Millionen aktiven NutzerInnen ist Facebook die mit Abstand erfolgreichste Onlineplattform weltweit. Begeistert werden die Mitglieder nicht nur durch die ständig wachsende Community, sondern auch die kontinuierlich ansteigende Anzahl an gebotenen Zusatzfunktionalitäten. Hinzu kommt die immer stärker werdende Präsenz als wirksames Werbemedium im kommerziellen Bereich. Ein weiterer Aspekt, der Facebook besonders interessant werden ließ, ist die verfügbare, nahtlose und sehr flexible Schnittstelle zu Social Apps bzw. Social Games. So konnten sich unter anderem eigene Spielehersteller etablieren. Einer der erfolgreichsten, der in diesem Zusammenhang zu nennen ist, ist die Wooga GmbH, die durch Ihr Spiel Brain Buddies bekannt wurde. Facebook liegt im Trend wie kein anderes soziales Netzwerk. Die kurze Reaktionsfähigkeit des Entwicklungsteams sowie die Bereitschaft, neue Wege zu gehen, ermöglichte die Erfolgsgeschichte des ehemaligen Harvard-Studenten und Facebook-Gründers Mark Zuckerberg, der so seinen „American Dream“ zur Realität werden lassen konnte.

Für die Entwicklergemeinde stellt Facebook eine Vielzahl an unterschiedlichen Möglichkeiten bereit. Die Standardkommunikation passiert über ein entsprechendes REST-API, eine genaue Dokumentation und Übersicht dazu findet sich im Facebook-eigenen Wiki unter [1]. Zwei zurzeit immer öfter genutzte Funktionalitäten sind Facebook Connect sowie Share on Facebook. Für die Arbeit mit dem REST-API empfiehlt sich der Einsatz diverser API-Wrapper. Im Umfeld von .NET-Anwendungen sei hier besonders das erst vor kurzem von Microsoft veröffentlichte Facebook-SDK erwähnt [2]. Eine vollständige Liste von Facebook anerkannten API-Wrappern findet sich unter [3]. Während andere soziale Netzwerke keinerlei direkte Zugriffe auf die dahinterliegenden Datenbanken zulassen, bietet Facebook mit seiner eigenen Datenbankabfragesprache, genannt FQL (Facebook Query Language) ein umfassendes Interface zur Kommunikation mit den Datenbanken sowie zur Abfrage aller verfügbaren sozialen Daten. Ergänzend dazu ist es mithilfe der Sprache FBML (Facebook Markup Language) möglich, Webanwendungen auf einfache Art und Weise durch so genannte Facebook-Tags direkt mit dem Netzwerk zu verbinden. Um die nachfolgenden Beispiele nachvollziehen zu können, benötigen Sie Ihren eigenen Facebook-Account. Sollten Sie noch keinen besitzen, erzeugen Sie jetzt unter www.facebook.com Ihr Konto.

Hello Facebook

Im ersten Schritt werden Sie Ihre eigene Anwendung bei Facebook registrieren. Begeben Sie sich dazu auf die Website [4] und betätigen Sie die Schaltfläche Neue Anwendung erstellen. Geben Sie Ihrer Facebook-Anwendung einen passenden Namen und beachten Sie dabei die entsprechenden Richtlinien. Facebook unterscheidet innerhalb des Anwendungsmodells im Wesentlichen zwischen zwei Kategorien von Applikationen:

  • Internet
  • Desktop

 Bei den Internetanwendungen handelt es sich, wie der Name bereits vermuten lässt, um Applikationen, die direkt innerhalb des Browsers ausgeführt werden. Im Rahmen der nachfolgenden Beispiele werden Sie jedoch eine Desktopanwendung benötigen. Legen Sie daher auf der Einstellungsseite Fortgeschritten als Application Type die Option Desktop fest.

Die Registerkarte Allgemeines beinhaltet unter anderem den für die Entwicklung von Facebook-Applikationen besonders wichtigen API-Schlüssel, der Ihre Anwendung eindeutig identifiziert. Sie benötigen ihn im Laufe der Beispiele, denn nur mit ihm ist eine erfolgreiche Verbindung über das REST-API möglich.

Sie werden im nächsten Schritt Ihre erste Desktopanwendung erstellen. Die eigentliche Facebook-Funktionalität werden Sie mithilfe des offiziellen Microsoft Facebook SDK implementieren. Falls nicht bereits geschehen, laden Sie sich dieses unter [2] herunter. Für die Arbeit mit dem Social Network beinhaltet das SDK die folgenden Dateien:

  • Facebook.dll
  • Facebook.Silverlight.dll
  • Facebook.Web.dll
  • Facebook.Web.Mvc.dll
  • Facebook.Winforms.dll

 Die dabei wichtigste Datei, Facebook.dll, stellt die Wrapper-Implementierung des Facebook-REST-APIs dar und wird von allen Anwendungen benötigt. Im zu erarbeitenden Beispiel werden Sie außer dieser auch noch die Datei Facebook.Winforms.dll benötigen, um ein entsprechendes Windows-Forms-Projekt zu realisieren. Die restlichen Dateien Facebook.Silverlight.dll, Facebook.Web.dll sowie Facebook.Web.Mvc.dll bieten komfortable Unterstützung im Rahmen der Entwicklung von Silverlight- bzw. ASP.net-Anwendungen. Auch das neue ASP.net MVC Framework wird bereits unterstützt.

Starten Sie jetzt Microsoft Visual Studio .NET und erzeugen ein neues Windows-Forms-Projekt. Für den vereinfachten Einstieg bietet das Microsoft SDK bereits einige Custom-Controls, mit deren Hilfe wir im ersten Beispiel die Liste der Freunde des aktuellen Benutzers anzeigen werden. Zu diesem Zweck erstellen Sie in der Visual Studio Toolbox über das Kontextmenü Registerkarte hinzufügen eine neue Registerkarte Facebook. Fügen Sie über den Eintrag Elemente Auswählen… des Kontextmenüs der neuen Registerkarte Verweise auf die von Microsoft zur Verfügung gestellten Facebook-Steuerelemente hinzu. Wählen Sie dazu im sich öffnenden Dialogfeld die Schaltfläche Durchsuchen und suchen Sie die zuvor heruntergeladene Datei Facebook.Winforms.dll. Klicken Sie im Anschluss auf OK, um die neuen Steuerelemente hinzuzufügen. Ihre Toolbox sollte in etwa wie die in Abbildung 1 aussehen.

Abb. 1: Steuerelemente des Microsoft Facebook SDK

Abb. 1: Steuerelemente des Microsoft Facebook SDK

Platzieren Sie jetzt die folgenden zwei Komponenten auf Ihrem Formular:

  • FacebookService
  • FriendList

 Fügen Sie nun den in Listing 1 gezeigten Code innerhalb des Event Handlers OnLoad Ihres Hauptformulars ein. Falls nicht bereits geschehen, erzeugen Sie ihn zuvor durch Doppelklick auf das Formular. Der entscheidendste Teil des Codes ist der Aufruf der Facebook-Methode ConnectToFacebook, denn dadurch wird dem Benutzer ein entsprechender Dialog, über den er sich an Ihrer Applikation authentifizieren muss, angezeigt. Wenn Sie Ihre Anwendung jetzt starten, sollten Sie den Anmeldedialog, auch bekannt als Facebook-Connect-Dialog, erhalten und nach erfolgreicher Anmeldung eine Liste der Freunde des Facebook-Accounts, über den Sie sich angemeldet haben, sehen.

h

Abb. 2: Facebook-Anmeldung und geladene Freundesliste

 

private void frmMain_Load(object sender, EventArgs e)
{
  //API Key festlegen
  facebookService1.ApplicationKey = "YOUR_API_KEY";
  //Verbindung herstellen
  facebookService1.ConnectToFacebook();
  //Freunde laden
  IList<user> friends = facebookService1.Friends.GetUserObjects();
  //Liste übergeben
  friendList1.Friends = friends;

Damit haben Sie erfolgreich Ihre erste Facebook-Desktopapplikation erstellt. Zwar ist die Funktionalität noch sehr eingeschränkt, aber Sie haben im Hintergrund, wenn vielleicht auch unbewusst, bereits viele Funktionen des sehr umfangreichen Facebook-REST-APIs genutzt. Wir werden jetzt den Lifecycle einer typischen Facebook-Anwendung analysieren. Die Vorgehensweise bei der Implementierung von eigenen Facebook-Anwendungen entspricht immer dem folgenden Schema:

 

  1. Auswahl des Anwendungstyps
  2. Authentifizierung mit Hilfe des API-Keys
  3. Authentifizierung mit Hilfe von Facebook-Kontodaten
  4. Kommunikation über das Facebook-REST API

 

Abbildung 3 illustriert diese Zusammenhänge und veranschaulicht den soeben beschriebenen Anwendungs-Lebenszyklus.

Abb. 3: Facebook Application-Lifecycle

Das von Ihnen implementierte erste Beispiel zeigt sehr deutlich, wie schnell die Anbindung an Facebook funktioniert. Allerdings ist mit dem Einsatz der Standardsteuerelemente auch nicht viel mehr als deren Basisfunktionalität möglich. Viel interessanter gestaltet sich die Arbeit mit den eigentlichen Facebook-Objekten, die wir im zweiten Beispiel genauer betrachten werden. Zunächst werden wir uns aber etwas detaillierter mit den so genannten Facebook-Benutzerprofilen auseinandersetzen.

Aufmacherbild: thumb up like facebook good social media share 3d symbol icon von Shutterstock / Urheberrecht: Sarawut Aiemsinsuk

[ header = Benutzerbezogene Daten ]

Benutzerbezogene Daten

Mitglieder von Facebook sind gleichzeitig Eigentümer eines persönlichen Profils. Dieses repräsentiert alle innerhalb des Netzwerks vorhandenen und gespeicherten Daten zu einem bestimmten Benutzerobjekt. Das Microsoft Facebook SDK kapselt diese Informationen als Klasse user, die im Namespace Facebook.Schema zu finden sind. Tatsächlich und unverständlicherweise sind die Klassennamen aller Facebook-Objekte klein geschrieben, das soll Sie bei der Arbeit aber nicht weiter stören. Erweitern Sie jetzt die bestehende Applikation um eine Schaltfläche, eine PictureBox sowie um zwei Labels und vergeben Sie dafür die folgenden aussagekräftigen Namen:

  • btnLoadUser
  • picProfileImage
  • lblName
  • lblSex

 Erzeugen Sie für die Schaltfläche eine entsprechende Ereignisbehandlungsroutine und setzen den in Listing 2 gezeigten Code ein. Dadurch greifen Sie direkt auf die Profilinformationen des ersten User-Objekts Ihrer Freundesliste zu und lesen dessen Eigenschaften Name und Geschlecht aus. Außerdem zeigen Sie das Profilbild in der dafür vorgesehenen PictureBox an. Starten Sie Ihre Anwendung und testen Sie die Funktionalität. Ihre Applikation sollte in etwa wie in Abbildung 4 gezeigt aussehen.

Abb. 4: Abfrage benutzerspezifischer Daten 

private void btnLoadUser_Click(object sender, EventArgs e)
{
  //Laden des Profilbilds
  picProfileImage.Image = friendList1.Friends[0].picture_small;
  //Laden des Namen
  lblName.Text = friendList1.Friends[0].first_name + " " + friendList1.Friends[0].last_name;
  //Laden des Geschlechts
  lblSex.Text = friendList1.Friends[0].sex;

Sinn dieses zweiten Beispiels war es, Ihnen zu zeigen, wie Sie ganz einfach auf spezifische, benutzerbezogene Daten zugreifen können. Sie haben bereits das Objekt user kennen gelernt. Weitere wichtige Objekte, mit denen Sie sich auseinandersetzen sollten, sind in der zur SDK gehörenden Dokumentation zu finden [5].

Berechtigungen

Sie haben anhand der vorigen Beispiele gelernt, wie Sie sich auf sehr einfache Art und Weise bei Facebook anmelden und entsprechende Objekte abfragen können. Sie werden das Beispiel jetzt erweitern und sollten am Ende in der Lage sein, Ihren aktuellen Status zu verändern. Um dies erfolgreich bewerkstelligen zu können, benötigen Sie aber ein wenig Grundwissen über die innerhalb von Facebook existierenden Permissions.
Bei den Permissions handelt es sich um das in Facebook implementierte Berechtigungsmodell. Bis jetzt hat Ihre Anwendung lediglich das Leserecht auf die mit Ihnen in Verbindung stehenden Objekte, also bspw. User, die mit Ihnen befreundet sind. Für die Aktualisierung Ihres persönlichen Status benötigt die Beispielanwendung jedoch weitere so genannte ExtendedPermissions. Eine vollständige Auflistung aller möglichen Rechtesets finden Sie unter [6]. Um die Aktualisierung des Status zu ermöglichen, benötigen Sie zukünftig auch das das Recht status_update. Um dieses Recht bei Applikationsstart anzufordern, verändern Sie bitte den Code des OnLoad-Handlers Ihres Formulars aus Listing 1, wie in Listing 3 gezeigt. Darin wird zusätzlich eine Liste an anzufordernden Berechtigungen erzeugt, die im Anschluss als Parameter an die bereits bekannte Methode ConnectToFacebook übergeben wird.

private void frmMain_Load(object sender, EventArgs e)
{
  //API Key festlegen
  facebookService1.ApplicationKey = "YOUR_API_KEY";
  //Rechteliste erstellen
  List<Facebook.Schema.Enums.ExtendedPermissions> requiredPermissions = new List<Enums.ExtendedPermissions>();
  //Anforderung
  status_update requiredPermissions.Add(Facebook.Schema.Enums.ExtendedPermissions.status_update);
  //Verbindung mit Rechteanforderung herstellen
facebookService1.ConnectToFacebook(requiredPermissions);
  //Freunde laden
  IList<user> friends = facebookService1.Friends.GetUserObjects();
  //Liste übergeben
  friendList1.Friends = friends;
}

private void btnSetStatus_Click(object sender, EventArgs e)
{
  //Aktualisieren des eigenen Status
  facebookService1.Status.Set("Über C# aktualisiert: " + txtNewStatus.Text);

Starten Sie die Anwendung und Sie werden merken, dass sich der Connect-Dialog jetzt aus zwei Teilen zusammensetzt. Abbildung 5 veranschaulicht diesen Vorgang. Achtung, wundern Sie sich nicht, Sie werden diesen Dialog exakt einmal in dieser Form erhalten, da jedes erweiterte Recht nur einmal erteilt werden muss; zumindest so lange, bis Sie das entsprechende Recht wieder entziehen.

Abb. 5: Benutzerspezifische Daten

Fügen Sie jetzt Ihrem bestehenden Formular eine TextBox sowie eine weitere Schaltfläche hinzu und positionieren Sie diese auf Ihrem Formular. Vergeben Sie im Anschluss die folgenden funktionsbezogenen Namen:

  • txtStatus
  • btnSetStatus

Implementieren Sie jetzt noch den in Listing 3 gezeigten Event Handler für die soeben erstellte Schaltfläche. Starten Sie danach die Anwendung erneut und testen die neue Funktionalität. Sie sollten bei Besuch Ihrer Facebook-Profilseite den aktualisierten Status sehen, ähnlich wie es Abbildung 6 zeigt. Beachten Sie, dass auch die Quelle der Aktualisierung in Form des Facebook-Applikationsnamens angegeben wird.

Abb. 6: Über das API aktualisierter Status

Selbstverständlich besteht die Möglichkeit, den soeben aktualisierten Statuseintrag über Ihre Facebook-Profilseite zu löschen. Im Rahmen dieser Tätigkeit ist es Ihnen auch erlaubt, das vorhin erteilte Recht zu widerrufen (Abb. 7). Dies führt dazu, dass beim nächsten Anwendungsstart die entsprechenden Berechtigungsdialoge erneut angezeigt werden.

Abb. 7: Widerrufen des erteilten Rechts

Der Stream

Abschließend werden wir uns noch mit einem der wichtigsten Themen beschäftigen, dem so genannten Facebook-Stream. Als Stream werden sämtliche Nachrichten, die sich auf Ihrer Profilseite befinden, bezeichnet. Für die Bearbeitung des Streams benötigen wir dementsprechend ein weiteres Recht: publish_stream. Erweitern Sie den Code des OnLoad-Handlers aus Listing 3 um folgende Zeile 

//Zusätzliche Anforderung des Rechts publish_stream

requiredPermissions.Add(Facebook.Schema.Enums.ExtendedPermissions.publish_stream);

und erzeugen eine neue Schaltfläche btnUpdateStream. Implementieren Sie im Anschluss die in Listing 4 gezeigte Ereignisbehandlungsroutine.

//Anforderung publish_stream
requiredPermissions.Add(Facebook.Schema.Enums.ExtendedPermissions.publish_stream);
private void btnUpdateStream_Click(object sender, EventArgs e)
{
  //Einfache Nachricht an den Stream senden
  facebookService1.Stream.Publish("Von C# generierte Nachricht");
  //Erweiterte Nachricht mit Anhang an den Stream senden
  //1. Informationsobjekt für Anhang erstellen
  attachment streamAttachment = new attachment();
  streamAttachment.caption = "www.mariofraiss.com";
  streamAttachment.name = "Hinweis zu meinem Weblog ";
  streamAttachment.href = "http://www.facebook.com";
  streamAttachment.description = "Weitere interessante Informationen rund um aktuelle Themen aus der .NET Welt finden sich auf meinem Weblog.";
  //2. Bild für Anhang erzeugen
  streamAttachment.media = new List<attachment_media>();
  attachment_media_image newImage = new attachment_media_image();
  newImage.src = "http://mariofraiss.files.wordpress.com/2008/04/portraitfoto2_fraiss.jpg?...";
  newImage.href = "http://www.mariofraiss.com/";
  //3. Bild dem Anhang hinzufügen
  streamAttachment.media.Add(newImage);
  //Erweiterte Nachricht mit Anhang an den Stream senden
  facebookService1.Stream.Publish("weitere Informationen im Attachment", streamAttachment, null, null, 0);
Starten Sie Ihre Anwendung und Sie werden bemerken, dass Sie diese ab sofort auch zur Erteilung des erweiterten Rechts publish_stream auffordert. Wenn Sie jetzt die soeben realisierte Funktionalität testen, sollten Sie ein Ergebnis ähnlich ähnlich dem in Abbildung 8 dargestellten sehen.

Abb. 8: An Stream gesendete Meldungen

Sie haben im Rahmen des Codes von Listing 5 mehrere Aufgaben gelöst:

  • Senden einer einfachen Nachricht an den Stream
  • Senden einer erweiterten Nachricht mit „Anhang“ an den Stream

Die Erzeugung und Übermittlung der Nachricht für den ersten Fall lässt sich mit der Methode Publish des Objekts Stream relativ einfach und unproblematisch bewerkstelligen. Im Gegensatz dazu erfordert die Erzeugung einer erweiterten Stream-Nachricht besondere Kenntnis und Verständnis für die dazu benötigten Objekte:

  • attachment
  • attachment_media

 Unter attachment versteht man im Kontext von Facebook Zusatzinformationen, die an eine Stream-Nachricht angehängt werden können, ähnlich wie dies bei herkömmlichen E-Mails der Fall ist. Das Objekt attachment_media repräsentiert dabei entsprechende mediale Inhalte, die ebenfalls angezeigt werden sollen. Im Rahmen von dem in Listing 4 gezeigten Beispiel ist dies eine einfache Grafik. Beachten Sie, dass sämtliche Mediadaten, auf die sie verweisen, auf einem beliebigen Webserver gelagert sein müssen.

Fazit

Herzlichen Glückwunsch! Sie haben Ihre ersten Schritte mit dem wirklich sehr umfangreichen Facebook-API erfolgreich gemeistert. Sie sollten, aufbauend auf den in den Beispielen vermittelten Inhalten und mithilfe der entsprechenden API- bzw. SDK-Dokumentation [1] sowie [2] zukünftig in der Lage sein, Ihre Anwendungen mit den unendlichen Weiten von Facebook kommunizieren zu lassen. Lassen Sie sich zu Beginn von der schier undurchschaubaren, teilweise sehr verwirrenden Objekthierarchie nicht beeindrucken und versuchen Sie, Ihre Problemstellungen in kleinere Einzelschritte aufzuteilen, um sie dann schrittweise zu implementieren.

Damit endet diese zweiteilige Artikelserie mit dem Schwerpunkt Social Services und Social Networks. Ich hoffe, Sie konnten anhand der Beispiele für Sie relevante Informationen erarbeiten und wünsche Ihnen auf diesem Wege viel Spaß und Erfolg bei der weiteren Arbeit mit diesen zurzeit brandaktuellen Themen. Fest steht, die Social World steht erst am Anfang, und wir dürfen gespannt sein, welche neuen Möglichkeiten und Services sich zukünftig etablieren werden.

Sollten Sie Anregungen oder Fragen zu diesem Artikel bzw. zur gesamten Artikelserie Get Sozialized! haben, so sind Sie herzlich dazu eingeladen, mich unter meiner E-Mail-Adresse oder über meinen Blog [7] zu kontaktieren.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -