私は現在、最初の Facebook アプリケーションを開発しています。FB.Event.subscribe('auth.login') と組み合わせた setExtendedAccessToken() 関数に問題があります。
私のjsコードは次のようになります:
window.fbAsyncInit = function() {
// init the FB JS SDK
FB.init({
appId : 'XXX', // App ID from the App Dashboard
channelUrl : 'http://domain.tld/app/channel.php', // Channel File for x-domain communication
frictionlessRequests: true,
cookie: true,
xfbml: true
});
FB.Event.subscribe('auth.login', function(response) {
$('#loginSpinner').show();
$('#loginFacebook').hide();
window.location = "http://domain.tld/app/?first_login";
});
};
auth.login
イベントは、ユーザーの最初のログイン時にのみトリガーする必要があります。この PHP コードも、最初のログイン時にのみトリガーする必要があります。
// triggers on first login
if (isset($_GET['first_login'])) {
if ($me) {
$facebook->setExtendedAccessToken();
$friends = $facebook->api('/me/friends');
$friends = $friends['data'];
if (!empty($friends)) {
//sql
}
$permissions = $facebook->api("/me/permissions");
if( array_key_exists('publish_actions', $permissions['data'][0]) ) {
$attachment = array(
'message' => 'XXX',
'name' => 'XXX - App',
'link' => 'http://domain.tld/app/',
'description' => 'XXX',
'picture'=> 'http://domain.tld/app/img.jpg',
'access_token' => $facebook->getAccessToken()
);
$facebook->api('/me/feed', 'POST', $attachment);
//sql
}
}
header('Location: http://domain.tld/app/');
exit;
}
問題は、現在のセッションを破棄し、Facebook がユーザーをアプリに自動的にログインさせるauth.login
ため、常に を呼び出す無限ループです。setExtendedAccessToken()
一度だけトリガーする方法はありauth.login
ますか?setExtendedAccessToken()
コメントに設定すると
// $facebook->setExtendedAccessToken();
私のサイトは、ユーザーを 1 回だけリダイレクトします。しかし、アプリの拡張ログインが必要です。