私はページタブのFacebook Appを作成しました。ここではファンであるかどうかに応じて異なるコンテンツを表示したいと思います。 (また、ファンゲート、ランディングページまたはページを明らかにすると呼ばれる)Facebookのsign_requestを受信していないiframe-app
は、このために、私は特定の次のコードでは、PHP SDKを使用しています:
<?php
require 'src/facebook.php';
$facebook = new Facebook(array(
'appId' => 'APP_ID',
'secret' => 'APP_SECRET',
'cookie' => true,
));
?>
とコンテンツ内:
<?php
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if (empty($data["page"]["liked"])) {?>
Thank you for liking our Page!
<?php } else { ?>
You haven't liked our page yet..
<?php };
// Debugging Code
echo "REQUEST:<br>";
print_r($_REQUEST);
echo "<br>GET:<br>";
print_r($_GET);
echo "<br>POST:<br>";
print_r($_POST);
?>
これは、私がFacebookのユーザーと一緒にログインしているとき、および自分のページで使用しているときに機能します。 意味signed_requestは$ _POSTと$ _REQUESTの両方に存在します。
私は他のユーザーとそれをテストする場合ただし、これらの変数にはsigned_request値がありません。..
注: は - 私はすでにアプリケーションの設定(300リダイレクトとスタッフの私のURLの設定を見ていました)しかし、これはうまく見え、私は私のユーザーと言ったように、それは働いている.. - signed_requestは空ではなく、存在しない。
誰も同じような問題がありますか?
PHPの代わりにJavascript SDKを使用しても問題ありませんが、Javascriptではそれほど経験はありません。
編集:私は分かったとして、あなたは常に非セキュア(HTTP)とセキュア(HTTPS)URLを持っている必要が
。 セキュアURLを標準URLとして入力しても、Facebookはhttpを使用してFacebookに連絡し、httpsにリダイレクトされます(サーバー構成によって異なります)。これにより、signed_requestが失われます。
あなたのクイック返信はThxです。あなたはPOST対GETについて正しいです、私は説明にそれらを混同しました。 – platzhersh
あなたが提案したような行を変更しましたが、それでも同じ効果があります。 私の個人的なアカウントではうまく動作しないため、URLがリダイレクトされないと確信しています。 – platzhersh
@platzhershでは、Chromeで "Developler Tools"(ネットワークタブ)のようなものを使用して、 "signed_request"が "tab canvas"に渡されているかどうかを確認することができます。 –