0

У меня есть приложение facebook iframe, которое правильно регистрирует и авторизует приложение, но getUser() работает только на первой странице. Как только пользователь нажимает ссылку на новую страницу в iframe, getUser() возвращает 0.facebook iframe app; php sdk getUser() возвращает действительный идентификатор на первой странице, но не для какой-либо другой страницы

Странно, что этот же код работает для другого приложения ... Я делаю все щелчки, которые я хочу, и getUser () возвращает действительный идентификатор.

приложение, которое не работает: https://apps.facebook.com/celestial_glory/

Тот, который делает (такой же кодовая): https://apps.facebook.com/uprisingstlouis/

Вот код, я использую:

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']; 
} 

какие-либо идеи? У меня есть трижды проверенные идентификаторы и секреты и холсты. Если бы это было неправильно, я бы не ожидал, что ни одна страница, даже первая, не сработает.

ответ

0

Изменение инициализации Facebook PHP-SDK для:

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

getUser работ на первой странице, потому что он может получить пользователь от signed_request (POST'ed от Facebook на свой холст страницу URL). Таким образом, вам нужно каким-то образом отслеживать пользователя, когда он начнет навигацию глубже в вашем приложении. Вы могли бы пройти signed_request как-то все самостоятельно или просто включить встроенную поддержку файлов cookie PHP-SDK, как было предложено выше.

+0

попробовал - без изменений 8 - (((. GetUser() по-прежнему возвращает действительную информацию для первой страницы, кроме 0. –

Смежные вопросы