0

アプリに正しくログインして承認するFacebook iframeアプリがありますが、getUser()は最初のページでしか機能しません。ユーザーが iframe 内の新しいページへのリンクをクリックするとすぐに、getUser() は 0 を返します。

奇妙なのは、この同じコードが別のアプリでも機能することです...必要なすべてのクリックを行うと、getUser() は有効な ID を返します。

動作しないアプリ: https://apps.facebook.com/celestial_glory/

(同じコードベース): https://apps.facebook.com/upisingstlouis/

私が使用しているコードは次のとおりです。

require_once ('fb/facebook.php');

// snip... set $app_id, $secret, and $canvas_page

// first, try normal facebook getUser().  If that works, awesome.

$facebook = new Facebook(array(
  'appId'  => $app_id,
  'secret' => $secret,
));

$signed_request = $_REQUEST['signed_request'];

// Get User ID
$user = $facebook->getUser();
if ($user != '0') return 'fb=' . $user; // works once

// getUser() didn't work.  Try oAuth.  Maybe user needs to log in or
// authorize the game?

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

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

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

if (empty($data["user_id"])) {
  echo '<a target="_top" href="' . $auth_url . '">Login to Facebook</a>';
  exit;
// normally we would auto-redirect, but with a uid of 0, this just auto-redirects
//    echo("<script> top.location.href='" . $auth_url . "'</script>");
} else {
  return 'fb=' . $data['user_id'];
}

何か案は?アプリの ID とシークレット、およびキャンバス ページを 3 回チェックしました。それらが間違っていた場合、最初のページでさえ、どのページも機能しないと思います。

4

1 に答える 1

0

Facebook PHP-SDK の初期化を次のように変更します。

$facebook = new Facebook(array(
  'appId'  => $app_id,
  'secret' => $secret,
  'cookie' => true // this!
));

getUserユーザーを取得できるため、最初のページで機能しますsigned_request(FacebookによってキャンバスページのURLに投稿されます)。したがって、ユーザーがアプリケーション内でより深いナビゲーションを開始したら、ユーザーを追跡する何らかの方法が必要です。signed_request上記のように、組み込みの PHP-SDK Cookie サポートを有効にすることもできます。

于 2012-01-29T09:23:05.860 に答える