Realtime Updates für das App Dashboard

Like it?
Share it!

Seit letzter Woche bietet Facebook für Realtime Updates ein Dashboard direkt in den App Settings an. Realtime Updates bieten die Möglichkeit, dass ein Server davon in Kenntnis gesetzt wird, wenn sich Daten oder Einstellungen eines Nutzers ändern. Ein klassisches Pull-Verfahren skaliert bei Millionen von Nutzern nicht und ist auch schon bei weniger Nutzern ineffizient und ressourcenfressend.

Das Prinzip ist denkbar einfach: Zuerst wird das Objekt gewählt und anschließend die Felder über deren Änderung eine Callback-URL benachrichtigt wird. Realtime Updates sind bei folgenden Objekten möglich:

  • User: Bestimmte Felder oder Verbindungen eines Nutzers.
  • Page: Falls eine Page die eigene App als Tab entfernt hat oder sich öffentliche Eigenschaften der Page geändert haben.
  • Permissions: Wenn sich von Nutzern abgegebene Permissions im Kontext der App ändert (z.b. bei einer Deinstallation!).
  • Payments: Abgeschlossene Payments oder Payment-Subscriptions.
  • Errors: Frontend- und Backend-Fehler.

Das Vorgehen unterteilt sich in folgende Schritte:

  1. Den Server einmalig authentifizieren.
  2. Facebook teilt dem Server mit, welche Daten sich geändert haben.
  3. Die geänderten Daten bei Facebook neu anfragen.

1. Authentifizieren

Bevor Facebook die Echtzeit-Benachrichtigungen an einen Server sendet, wird dieser verifiziert: Facebook überprüft die eingetragenen Werte, ob es sich hier um wirklich einen Server handelt, welcher dafür konfiguriert wurde Echtzeit-Daten von Facebook entgegen zu nehmen. Ansonsten wäre es ein einfaches mittels einer hochfrequentierten Anwendung einen fremden Server mit unnützen Anfragen zu bombardieren. Hierfür werden zum Speichern der Änderungen im App-Dashboard drei GET-Parameter an den Server gesendet:

  • hub.mode mit dem Parameter “subscribe”
  • hub.challenge – ein zufälliger String von Facebook. Dieser Parameter muss vom Server zur Authentifizierung wieder ausgegeben werden.
  • hub.verify_token – Der Token, der von uns bei Facebook hinterlegt wurde, um uns abzusichern, dass hier gerade auch unsere eigene App eine Anfrage sendet.

Hat der Server die Challenge korrekt zurückgegeben, wird die Subskription akzeptiert.

Beachtet hier, dass bei PHP ein Punkt im Parameter direkt zu einem Unterstrich umgewandelt wird. Euer PHP-Skript muss also

<?php echo $_REQUEST['hub_challenge']; ?>

zurückgeben.

2. Callback

Sollten sich für die abonnierten Objekte bzw. Felder Änderungen ergeben, sendet Facebook einen POST-Request mit Informationen darüber, welche Felder sich geändert haben. Diese Daten werden im JSON-Format und auch mit MIME-Type application/json gesendet.

{ “object”: “user”,
“entry”: [ {
"uid": 7078892557,
"changed_fields": [
"last_name"
], “time”: 232323}]}

3. Daten anfordern

Hat man die Information darüber, welche Felder sich geändert haben, können diese bei Facebook neu angefragt werden. Facebook schickt vermutlich die neuen Daten nicht direkt mit, da diese sich ja noch mehrfach ändern können und auch um zu verhindern, dass der Anbieter aktuelle Daten bekommt, falls der Nutzer die Anwendung kurz darauf deinstalliert.


Diskutiere mit uns!