facebook iframe应用程序;php sdk getUser()返回第一页上的有效id,但不返回任何其他页的有效id

facebook iframe应用程序;php sdk getUser()返回第一页上的有效id,但不返回任何其他页的有效id,php,facebook,facebook-graph-api,facebook-iframe,iframe-app,Php,Facebook,Facebook Graph Api,Facebook Iframe,Iframe App,我有一个facebook iframe应用程序,可以正确登录并授权该应用程序,但getUser()只能在第一页上运行。一旦用户单击iframe中指向新页面的链接,getUser()将返回0 奇怪的是,同样的代码适用于另一个应用程序。。。我执行所有我想要的单击操作,getUser()返回一个有效的ID 无法运行的应用程序: 执行以下操作的代码(相同的代码基): 以下是我正在使用的代码: require_once ('fb/facebook.php'); // snip... set $app_i

我有一个facebook iframe应用程序,可以正确登录并授权该应用程序,但getUser()只能在第一页上运行。一旦用户单击iframe中指向新页面的链接,getUser()将返回0

奇怪的是,同样的代码适用于另一个应用程序。。。我执行所有我想要的单击操作,getUser()返回一个有效的ID

无法运行的应用程序:

执行以下操作的代码(相同的代码基):

以下是我正在使用的代码:

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'];
}
require_once('fb/facebook.php');
//剪断。。。设置$app\u id、$secret和$canvas\u页面
//首先,尝试普通的facebook getUser()。如果这行得通,那太棒了。
$facebook=新的facebook(数组)(
“appId”=>$app\u id,
'secret'=>$secret,
));
$signed_request=$_request['signed_request'];
//获取用户ID
$user=$facebook->getUser();
如果($user!=“0”)返回“fb=”$用户;//工作一次
//getUser()不起作用。试试oAuth。可能用户需要登录或
//授权游戏?
$auth\u url='1http://www.facebook.com/dialog/oauth?client_id='
. $应用程序id。”&重定向_uri='。urlencode($canvas_page);
列表($encoded_sig,$payload)=分解('.',$signed_请求,2);
$data=json_解码(base64_解码(strtr($payload,'-'','+/')),true);
if(空($data[“user\u id”])){
回声';
出口
//通常我们会自动重定向,但如果uid为0,这只是自动重定向
//echo(“top.location.href=”。$auth_url。””;
}否则{
返回'fb='。$data['user_id'];
}

有什么想法吗?我已经三次检查了应用程序ID、机密和画布页面。如果这些都是错误的,我希望没有任何页面,即使是第一个页面也不会工作。

将Facebook PHP-SDK初始化更改为:

$facebook = new Facebook(array(
  'appId'  => $app_id,
  'secret' => $secret,
  'cookie' => true // this!
));
getUser
在第一个页面上工作,因为它可以从
signed_请求
(由Facebook发布到您的画布页面URL)获取用户。因此,一旦用户开始在应用程序中进行更深入的导航,您就需要某种方法来跟踪他。您可以通过自己的方式传递
signed_请求
,或者只需按照上面的建议启用内置PHP-SDK cookie支持。

尝试过它--没有更改8-(.getUser()仍然返回第一页的有效信息,但0超出此范围。