Zum Inhalt springen
Der Guide für ein smartes Leben.
VG Wort Pixel
Facebook API

Verbindung mit PHP

Autor: Christian Wenz • 5.8.2010 • ca. 3:30 Min

Das Gros der Logik unserer BFFOracle-Anwendung ist in PHP geschrieben, weswegen wir zur Integration in unsere eigene Website auch PHP-Code benötigen. Ausgangsbasis sind die im vorherigen Artikel zu Facebook erstellten Klassen, insbesondere die Dateien BFFOracle.php (die eigentliche Logik) sowie con...

image.jpg
Geben Sie bei Connect URL einen Wert an.
© Internet Magazin

Das Gros der Logik unserer BFFOracle-Anwendung ist in PHP geschrieben, weswegen wir zur Integration in unsere eigene Website auch PHP-Code benötigen. Ausgangsbasis sind die im vorherigen Artikel zu Facebook erstellten Klassen, insbesondere die Dateien BFFOracle.php (die eigentliche Logik) sowie config.inc.php (wo Sie Daten wie etwa API-Schlüssel und das Passwort eintragen müssen).Außerdem benötigen wir die PHP-Klassen von Facebook(https://developers.facebook.com/clientlibs/facebook-platform.tar.gz). Im Archiv steckt der Ordner facebook-platform, den Sie direkt ins Anwendungsverzeichnis entpacken. Alle Verzeichnisse im Unterordner facebook-platform/php (inklusive des Verzeichnisses jsonwrapper) kopieren Sie dann in das Anwendungsverzeichnis. Der folgende Code im Seitenkopf initialisiert die Anwendung:

<?php require_once 'facebook.php'; require_once 'config.inc.php'; require_once 'BFFOracle.php'; $fb = new Facebook(BFF_KEY, BFF_PWD); // ... ?>

Die nächsten Schritte sind analog zu vorher: Laden Sie am Ende der Seite die Skriptdatei FeatureLoader.js.php vom Facebook-Server und rufen Sie FB.init() auf. Als Nächstes versuchen wir über die Facebook-API den aktuell eingeloggten Nutzer zu ermitteln:

$user = $fb->get_loggedin_user();

Haben wir einen Nutzer, rufen wir die Funktionalität der Anwendung ab. Falls nein, geben wir wieder einen Login-Button aus. Der Wert des Attributs onlogin hat sich allerdings geändert: Die Seite wird dann neu geladen, damit der PHP-Code die Anwendungslogik ausführen kann. Beachten Sie, dass Sie für den folgenden Code auch wieder den fb-Namespace im <html>-Tag angeben müssen.

<?php if ($user) { // ... } else { ?><fb:login-button onlogin="location. reload();"></fb:login-button><?php } ?>

Erkennt die Facebook-API dagegen einen Nutzer, rufen wir unsere Anwendungsfunktionalität auf, um den/die BFF des Anwenders zu ermitteln und dann samt Profilfoto auszugeben. Das Gros der Logik ist ja bereits in der PHP-Klasse BFFOracle implementiert; wir zapfen das jeweils nur an:

<?php // ... $bff = new BFFOracle($fb, $user); $uid = $bff->getBFF(); $data = $fb->api_client-> users_getInfo($uid, 'first_name, last_name, pic'); $pic = $data[0]['pic']; $name = $data[0]['first_name'] . ' ' . $data[0]['last_name']; ?><h2>You BFF is <?php echo $name; ?>. </h2><p><img src="<?php echo $pic; ?>" title="<?php echo $name; ?>" /></p>

image.jpg
Der Name des Benutzers erscheint.
© Internet Magazin

Bei bestimmten Anwendungsszenarien kann es allerdings passieren, dass Sie eine Fehlermeldung in Form einer PHP-Exception erhalten: "Session key invalid or no longer valid". Das ist eine Beschränkung der Methode get_loggedin_user(), die aus dem Tritt kommen kann, wenn man sich in einem Fenster in eine Anwendung einloggt und dann in einem anderen Fenster aus Facebook wieder ausloggt.Der gebräuchlichste Workaround stammt von cutfromthenorth.com/handling-session-key-invalid-or-no-longer-valid-errors-from-facebook/ und fängt die Exception einfach ab. Tritt eine Ausnahme auf, wird mit clear_cookie_state() die noch vorhandene Session gelöscht. Auf unser Beispiel umgemünzt führt das zu folgendem Code:

<div id="BFF"><?php if ($user) { try { $bff = new BFFOracle($fb, $user); // ... } catch (Exception $ex) { $fb->clear_cookie_state(); unset($user); } } else { // ... } ?></div>

Jetzt funktioniert die Anwendung wie gewünscht: Nach kurzer Zeit wird ein Kontakt samt Foto (sofern vorhanden) ausgegeben. Der Algorithmus basiert allerdings nicht wirklich auf wissenschaftlichen Erkenntnissen, sondern sucht einfach von zufällig ausgewählten Kontakten denjenigen aus, der die ähnlichste Schreibweise hat. Übereinstimmungen beim Vornamen beispielsweise erhöhen die Chancen auf gegenseitige Sympathie in erheblichem Maße.

Troubleshooting

Facebook Connect ist ein durchdachtes Konzept, allerdings fällt das Debugging teilweise schwer. Damit es bei Ihnen im Projekt nicht kurz vor Deadline zu unerklärlichen Phänomenen kommt, folgen einige Tipps für typische Fehler. Stets eliminiert müssen etwaige Tippfehler - etwa im Dateinamen der Cross-Domain-Datei sowie im HTML-Markup. Andernfalls weist möglicherweise der FBML-Parser Seiteneffekte auf.Des Weiteren ist es ein Muss, mit einem Tool wie Firebug (https://getfirebug.com ) oder Fiddler (https://fiddler2.com ) den HTTP-Verkehr zu beobachten. Facebook fragt nämlich unter anderem den aktuellen Status des Benutzers ab. Dabei werden auch die Cross-Domain-Datei sowie die Einstellung Connect URL überprüft. Fängt der Pfad zu ersterer Datei nicht mit letzterer URL an, gibt es einen Fehler, der aber nur bei Beobachtung der per HTTP übertragenen Daten sichtbar ist.Facebook Connect ist eine tolle Möglichkeit, um seine eigene Webanwendung mit Facebook zu verwenden - und wir haben erst einen Teil der Features kennen gelernt. Wie immer gelten die üblichen Einschränkungen: Nur Facebook-Nutzer haben etwas von den Funktionalitäten, und Javascript ist absolut Pflicht.