を使用している場合、ポップアップを停止することはできませんFB.login
。
サーバー側の認証を使用するかFB.getLoginStatus
、最初のケースでポップアップを防止するために使用します。
FB.getLoginStatus を使用すると、ユーザーが Facebook にログインしてアプリを認証したかどうかを判断できます
Facebook ドキュメントを参照
上記の参照リンクからのスニペット、
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
// the user is logged in and has authenticated your
// app, and response.authResponse supplies
// the user's ID, a valid access token, a signed
// request, and the time the access token
// and signed request each expire
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
} else if (response.status === 'not_authorized') {
// the user is logged in to Facebook,
// but has not authenticated your app
} else {
// the user isn't logged in to Facebook.
}
});
これが必要です。
編集:(OPのコメントの後)
Facebookが古い結果をキャッシュしている可能性があります。上記と同じリンクから、
Facebook のサーバーへの往復
アプリケーションのパフォーマンスを向上させるために、ユーザーのステータスを確認するためのすべての呼び出しが Facebook のサーバーへのリクエストになるわけではありません。可能な場合、応答はキャッシュされます。現在のブラウザ セッションで初めて FB.getLoginStatus が呼び出されたとき、または JD SDK が status: true で初期化されたときに、応答オブジェクトが SDK によってキャッシュされます。FB.getLoginStatus への後続の呼び出しは、このキャッシュされた応答からデータを返します。
これにより、ユーザーが最後の完全なセッション ルックアップ以降に Facebook にログイン (または Facebook からログアウト) した場合、またはユーザーがアカウント設定でアプリケーションを削除した場合に問題が発生する可能性があります。
これを回避するには、2 番目のパラメーターを true に設定して FB.getLoginStatus を呼び出し、Facebook へのラウンドトリップを強制します。これにより、応答オブジェクトのキャッシュが効果的に更新されます。
FB.getLoginStatus(function(response) {
// this will be called when the roundtrip to Facebook has completed
}, true);
ページが読み込まれるたびに FB.getLoginStatus を呼び出す場合は、Facebook のサーバーへのリクエスト数が大幅に増加し、アプリケーションのパフォーマンスが低下するため、それぞれにこのパラメーターを設定しないように注意してください。