0

Facebook ビジネス ページ用のカスタム iframe/キャンバス ページ (または現在は「アプリ」として知られている) を開発しています。私の目的のために、現在ログインしている(そして現在ページが好きな)ユーザーの姓名を取得して、ページに出力したいと思います。このスクリプトは、アプリ管理者としてログインしている場合は問題なく動作しますが、個人アカウントまたは複数の友人アカウントとしてログインしようとすると、$session が null のように見えます。これはなぜですか? また、ユーザーに追加の認証を行わずに姓名を取得するにはどうすればよいですか?

<?php
require_once '../db/connect.php';
require_once '../../lib/facebook.php';
$signed_request = $_REQUEST["signed_request"];
$secret = "***********************************";
$facebook = new Facebook(array(
    'appId'  => '**************',
    'secret' => $secret,
    'cookie' => true
));
$session = $facebook->getSession();
$me = null;
// Session based API call.
if ($session) {
    echo "\$session is not null!";
    try {
        $uid = $facebook->getUser();
        $me = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
    }
}
echo $me['name'];
?>
4

1 に答える 1

1

残念ながら、これは不可能です (参照):

signed_requestキャンバス ページと同様に、ユーザーがアプリを承認するまで、 アプリにアクセスできるすべてのユーザー情報を受け取ることはできません 。

そのため、最初にユーザーがアプリケーションを承認する必要があります。これは次の場所にあります

 <?php 

     $app_id = YOUR_APP_ID;

     $canvas_page = YOUR_CANVAS_PAGE_URL;

     $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page);

     $signed_request = $_REQUEST["signed_request"];

     list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

     if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");
     } else {
            echo ("Welcome User: " . $data["user_id"]);
     } 
 ?>

アプリケーションを承認してユーザー ID を取得した後のプロセスは簡単だと思います。

于 2011-03-17T17:53:07.040 に答える