Seiten ID als Parameter an eine Facebook App
the-guru
- php
Hy alle zusammen,
vorweg ich freu mich, dass das gute alte Forum wieder da ist. Und darf weg vom stillen Leser zum aktiven Poster werden.
Noch eins, ich hoffe ich hab die Frage in den richtigen Bereich gepostet. Aber mir fehlt die Kategorie Facebook API und merkwürdige Kundenwünsche :). Aber da es ums PHP SDK sollte es passen.
Ich habe für einen Kunden Facebook Apps erstellt und Contao als CMS verwendet.
Das ganze ist einfach gesagt ein mehrseitiger Blog. Die einzelnen Seiten sind eigene Apps. Also zum Beispiel die Seite winwin.php ist ein Seitenreiter die Seite megafun.php ist eine eigene App und so weiter. Damit das für die Canvas Seiten auch so möglich ist die bei der Canvas URL nur Ordner demnach keine .html oder .php Endungen zu lassen habe ich in Contao einen kleinen Hack, dass die einzelnen Seiten ohne Datei Endungen aufgerufen werden können. Nun gut das funktioniert auch alles.
Nun gut alle Seiten haben einen Like-Button ((X)FBML Like Button) der die aktuelle URL verwendet. Und hier kommt das Problem, wir teilen jetzt zwar immer die jeweilige App und nicht die Adresse von unseren Server. Gewünscht ist jedoch, dass jeder Artikel im Blog geteilt und geliked werden kann. Was theoretisch natürlich kein Problem ist nur, dadurch dass die Facebook URL immer gleich bleibt funktioniert das nicht so ganz.
Auch dafür hätten wir eine Lösung gefunden. Die Facebook URL ist ja so aufgebaut: https://www.facebook.com/MEINE-TOLLE..._MEINETOLLEAPP. Mit Facebook Action Links möchte ich die Seiten ID von Contao an die Facebook URL übergeben. Was ja eigentlich auch funktioniert. Die Facebook URL würde dann wie folgt aussehen: https://www.facebook.com/MEINETOLLEF...il%26id%3D1014.
Dazu würdes es eh reichlich im Developer Blog geben jedoch haut das nicht so ganz hin und problematisch aber lösbar wird es wenn ich das in Contao umsetzen möchte.
Ich habe natürlich schon das PHP-SDK eingefügt und ein Template mit dem folgenden Code gefunden.
<?php
if(isset($_REQUEST["signed_request"]))
{
$signed_request = $_REQUEST["signed_request"];
// $_POST also work, but better with $_REQUEST
list($encoded_sig, $payload) = explode(‘.’, $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, ‘-_’, ‘+/’)), true);
if(isset($data['app_data']))
{
$mydata = $data['app_data']; //here you can get the value you passed
}
}
?>
Wie gesagt theoretisch funktioniert das ganze. Nur mit dem praktischen Teil klappt es noch nicht so ganz
Ich würde mich über eine kleine Eingebungen oder Ideen freuen
Danke euch schon mal
beste Grüße
Georg
Hi,
Damit das für die Canvas Seiten auch so möglich ist die bei der Canvas URL nur Ordner demnach keine .html oder .php Endungen zu lassen
Du kannst auch URLs mit „Dateiendungen“ für die Canvas-Adressen verwenden – musst dann nur noch einen Querystring anhängen.
Die Facebook URL würde dann wie folgt aussehen: https://www.facebook.com/MEINETOLLEF...il%26id%3D1014.
Du kannst keine „eigenen“ Parameter per URL an eine Page Tab/Canvas App durchreichen, sondern *musst* den Parameternamen app_data verwenden.
Da kannst du rein packen, was du willst – einen einzelnen Wert, oder bspw. auch einen JSON-String.
MfG ChrisB
Hy ChrisB,
danke für die fixe Antwort
Du kannst auch URLs mit „Dateiendungen“ für die Canvas-Adressen verwenden – musst dann nur noch einen Querystring anhängen.
Ja sowas habe ich im Developer Blog auch gelesen. Aber die Methode hab ich irgendwie einfacher gefunden :-) Aber sogesehen wäre es vielleicht eh sinnvoller gewesen
Du kannst keine „eigenen“ Parameter per URL an eine Page Tab/Canvas App durchreichen, sondern *musst* den Parameternamen app_data verwenden.
Da kannst du rein packen, was du willst – einen einzelnen Wert, oder bspw. auch einen JSON-String.
Mhm sorry ich hab mich da wohl etwas schlecht ausgedrückt. Das ich keine eigenen Parameter "anhängen" kann war mir klar. Ich wollte die app_data mit den Seiten-ID's von Contao befüllen. Da das von der Wartbarkeit einfacher ist, wenn die Seiten ID den selben Wert wie die app_data hat. Und das wollte ich auch so umsetzten. Nur klappt die Umsetzung nicht. Im Grunde ist es ja das selbe Prinzip wie die action beim Signed Request. Oder? Bzw wenn ich wie im oberen Beispiel versuch die app_data zu definieren ignoriert er es.
Danke dir für den Input :)
glg G:
Hi,
Ich wollte die app_data mit den Seiten-ID's von Contao befüllen.
Und wo hast du das gemacht?
In deinem abgeschnittenen Beispiel-URL war das nicht wirklich zu erkennen.
MfG ChrisB
Und wo hast du das gemacht?
Zuerst wird das PHP SDK und javascript SDK eingebunden und Key übergeben. Und dann:
if (isset($signedRequest['app_data'])) {
$data = explode("|", $signedRequest['app_data']);
if ($data[0] == 'id') {
$id = htmlspecialchars($data[1]);
}
Die Daten werden abgegriffen bzw die Seiten ID angehängt.
Der signed_request wird als Post Parameter an das Backend übergeben.
var dataString = {
mode:'getSignedRequest',
signed_request:signedRequest //add the signed request
};
$.ajax({
type: "POST",
url: "ajax.php",
data: dataString,
dataType:'json',
success: function(data)
{
//set on success the parsed data out of the signed request
//do something with the data
}
});
Dann sollte die URL ja https://www.facebook.com/meinefanseite?sk=app_meineAPPID&app_data=action%id%3D1014 lauten?
Sorry und danke
Hi,
Dann sollte die URL ja https://www.facebook.com/meinefanseite?sk=app_meineAPPID&app_data=action%id%3D1014 lauten?
Nein, %id ist kein gültiger URL-encodeter Bytewert.
MfG ChrisB
Nein, %id ist kein gültiger URL-encodeter Bytewert.
Mhm ok, ich hab eine andere App bei dem ganzen als Vorbild genommen. https://www.facebook.com/beatpatrolfestival?sk=app_306301516105256&app_data=action%3Ddetail%26id%3D1014 Die das ganze ja auch quasi je Künstler "abändern".
Weißt du wie ich das ganze umsetzten könnte?
Danke
glg G:
Hi,
Weißt du wie ich das ganze umsetzten könnte?
Übergebe den/die Werte, die du übergeben möchtest, per app_data …
MfG ChrisB
Übergebe den/die Werte, die du übergeben möchtest, per app_data …
Jop, siehe obere Posts, das war schon klar :)- Nur klappt es nicht beim praktischen Teil.. Bzw hab ich keinen wirklichen Plan mehr was ich bei meinen Code ändern soll
Danke trotzdem
glg G: