18
Feb
2011
admin

Der Facebook Requests Dialog 2.0 - Automatisch Requests generieren

Im Artikel Der Facebook Requests Dialog habe ich beschrieben, wie man die Request Dialoge einsetzt, um z.B. Einladungen zu Anwendungen zu verschicken. Wie wir gesehen haben, erfordern die Requests des Request Dialogs immer eine Benutzerinteraktion. Es gibt aber auch Möglichkeiten, um Requests automatisch zu generieren und zu verschicken. Um das automatische Generieren von Requests nutzen zu können, muss man dieses Feature zurzeit noch manuell in den Einstellungen der Facebook Anwendung aktivieren. Im Bereich Fortgeschritten, müssen wir folgende Einstellung vornehmen.

facebook-requests-2.0.jpg

Automatische Requests können nur von Benutzern initiiert und empfangen werden, die die Facebook Anwendung autorisiert haben. Das Generieren, Auslesen und Löschen dieser Requests, muss der Entwickler selbst vornehmen. Diese Requests werden nicht automatisch nach dem Lesen gelöscht. Erst nach 14 Tagen werden Requests automatisch gelöscht.

Automatische Requests sind immer dann sinnvoll, wenn man die Benutzer, aus der Facebook Anwendung heraus, zum erneuten Interagieren mit der Anwendung animieren möchte. Wie auch bei den Benutzergenerierten Requests, wird auch hier automatisch die Anzahl der Requests in den Bookmarks angezeigt.

bookmarks.jpg

Um einen solchen Request automatisch zu generieren, können wir die PHP SDK, bzw. die Graph API nutzen.

// Facebook PHP SDK einbinden
require_once 'library/facebook.php';

define('APP_ID', '180266555350464');
define('SECRET', 'b938ea614ac6c4ad9738126ba4c648c2');

$config = array(
  'appId' => APP_ID, // Anwendungs ID
  'secret' => SECRET, // Anwendungs Geheimnis
  'cookie' => false, // Keinen Cookie Support
);

$facebook = new Facebook($config);

if (!$session = $facebook->getSession()) {
  // Wenn der User die Anwendung noch nicht autorisiert hat,
  // wird er zum Autorisierungsdialog weitergeleitet.
  $oauth = "http://www.facebook.com/dialog/oauth/?"
         . "client_id=" . APP_ID . "&"
         . "redirect_uri=http://apps.facebook.com/atw-requests/&"
         . "response_type=token";

  print 'Um diese Anwendung zu testen, musst du sie zuerst <a href="' . $oauth . '" target="_parent">autorisieren</a>';
} else {

  // Die Nachricht, die im Request enthalten sein soll.
  $params = array(
    'message' => 'eine nachricht',
  );
  // Den Request generieren.
  $result = $facebook->api('/me/apprequests', 'post', $params);
  
  print 'Request ID: ' . $result;
}

Die relevanten Zeilen habe ich hervorgehoben. In Zeile 27 - 29 erstellen wir uns ein Array, in dem wir die Nachricht festlegen, die im Request enthalten sein soll. Diese Nachricht können wir später dem Benutzer, der diesen Request erhält, anzeigen lassen. Der Aufruf in Zeile 31 sendet den Request an den aktuellen Benutzer. Man kann hier natürlich auch eine ID eines beliebigen Nutzers angeben, der diesen Request empfangen soll: $facebook->api('/ID_DES_BENUTZERS/apprequests', 'post', $params);. Einzige Voraussetzung ist natürlich, dass dieser User die Anwendung ebenfalls autorisiert hat.

Hinweis
Du kannst dieses Beispiel unter http://apps.facebook.com/atw-requests/app-generated-request.php testen. Es werden keine Daten von dir gespeichert. Du kannst die Anwendung nach dem Testen wieder entfernen, indem du unter http://www.facebook.com/settings/?tab=privacy deine Einstellungen für Anwendungen und Webseiten bearbeitest.

Nachdem dieser Request gesendet wurde, werden wir in unseren Bookmarks darauf hingewiesen, dass ein neuer Request besteht (siehe Screenshot weiter oben). Klicken wir nun auf diesen Bookmark, gelangen wir zur Canvas Seite unserer Anwendung. Es werden automatisch die Parameter ref und count angehängt.

http://apps.facebook.com/atw-requests/?ref=bookmarks&count=1

Der Parameter ref dient dabei dem Tracking. Der Paramter count enthält die Anzahl der neuen Requests.

Wollen wir uns nun die Requests eines Benutzer ausgeben lassen, sind nur kleine Änderungen in unserem Script notwendig. Wir ändern hier lediglich den API Aufruf etwas ab und geben das Ergebnis dann aus.

  // Alle Requests des aktuellen Benutzers auslesen.
  $requests = $facebook->api("/me/apprequests", 'get');
  print '
' . print_r($requests, true) . '

';

Das Ergebnis ist ein Array, welches alle Daten des Requests enthält.

facebook-requests-2.0-dump.jpg

Hinweis
Um dieses Beispiel zu testen, folge einfach dem Link in deinen Bookmarks, nachdem du einen Request erzeugt hast. Es werden keine Daten von dir gespeichert. Du kannst die Anwendung nach dem Testen wieder entfernen, indem du unter http://www.facebook.com/settings/?tab=privacy deine Einstellungen für Anwendungen und Webseiten bearbeitest.

Diese Daten können wir nun verarbeiten und dem Benutzer z.B. die enthaltene Nachricht anzeigen.

Wie schon erwähnt, müssen wir uns selbst um das Löschen der Requests kümmern. Wenn dieser Request nun also angezeigt und die erforderliche Aktion, die wir von Benutzer erwarten, ausgeführt wurde, können wir diesen Request wieder löschen. Auch dafür ändern wir nur den API Aufruf leicht ab. In diesem Beispiel durchlaufen wir einfach alle Requests des Benutzers und löschen alle nacheinander.

  $requests = $facebook->api("/me/apprequests", 'get');
  
  foreach($requests['data'] as $item) {
    $id = $item['id'];

    if($facebook->api($id, 'delete') === true) {
      print 'Request ' . $id . ' geloescht
'; } }
Hinweis
Um dieses Beispiel zu testen, gehe auf http://apps.facebook.com/atw-requests/delete-requests.php, nachdem du einen Request erzeugt hast. Es werden keine Daten von dir gespeichert. Du kannst die Anwendung nach dem Testen wieder entfernen, indem du unter http://www.facebook.com/settings/?tab=privacy deine Einstellungen für Anwendungen und Webseiten bearbeitest.

 

Hinweis
Du kannst alle Codebeispiele von AboutTheWeb über ein SVN Repository auschecken. Dieses Beispiel findest du unter folgender Adresse:
http://svn.abouttheweb.de/atwtutorials/trunk/requests/

Alternativ kannst Du alle Codebeispiele über das AboutTheWeb github Repository auschecken.

Trackback-URL für diesen Beitrag

http://www.abouttheweb.de/trackback/640

Ähnliche Artikel

Bild des Benutzers Muri
Muri
So, 04/10/2011 - 15:47

Ich habe das so auf meine Fanseite eingefügt aber das funktioniert nicht:((

Bild des Benutzers admin
admin
Mo, 04/11/2011 - 08:33

Was genau hat nicht funktioniert?
Hast du

  1. Die Beispiele aus dem Repository ausgecheckt?
  2. Deine eigene Anwendungs ID, sowie dein eigenes Anwendungs Geheimnis verwendet?
Bild des Benutzers mert_can2
mert_can2
Sa, 04/30/2011 - 23:15

Gibt es html Codebeispiele oder Javascript?

Bild des Benutzers admin
admin
Sa, 04/30/2011 - 23:18

Beispiele wofür genau? In den Repositorys ist eigentlich alles, was du brauchst.

http://svn.abouttheweb.de/atwtutorials/trunk/requests/

Bild des Benutzers mert_can2
mert_can2
So, 05/01/2011 - 00:17

Danke schön für die schnelle antwort. Ich kann zu wenig deutsch schreiben. Vielleicht habe ich nicht genau erklären.

So kann ich ihnen sagen. Ich brauche Javascript code oder html code. Kein PHP :)

Bild des Benutzers MIrco
MIrco
Do, 05/26/2011 - 10:52

Mmm, whats wrong with that?

OAuthException: (#200) Invalid Request: There was a problem with the parameters of the request. Body of an error/warning message. Title is: Invalid Request

Other Api-Calls work!

Bild des Benutzers Mirco
Mirco
Mo, 05/30/2011 - 12:58

Mmm...mit /me/ geht es, aber was bringt mir das dann den Counter zu erhöhen? Ich würde ihne halt gerne erhöhen, wenn etwas Neues in der App vorliegt, denn wenn ich das nur kann, wenn der User in der App schon drin ist, dann sieht er das ja auch dort sofort und muss dazu nicht extra auf die FB-Home gehen. Wo ist der Sinn dieser Funktion?

VG!

X
Laden