2

ユーザーがアプリに必要なすべての権限を提供しているかどうかを確認するために、次のようにします。

/*Solo hacemos la peticion si el checkbox estaba desmarcado. Nota: esta funcion asume que solo hay un checkbox en el dom*/
if($('input:checkbox').prop('checked')){
    FB.login(function(response){
             console.log(response.status);
            if (response.status == 'connected') {
            hi   /* Entonces listo */
            }else{
                 /* Entonces cancelamos el checkbox */
                 $('input:checkbox').removeAttr('checked');
            }
    }, { scope: 'publish_stream' });
}

こちらです:

  • ユーザーがすでにそれを行っている場合: ポップアップが 1 秒未満で開かれます

  • ユーザーがまだ行っていない場合: 許可ダイアログが表示されます

質問: 最初のケースでダイアログが開かないようにするにはどうすればよいですか (おそらくバックグラウンドで実行されます)。

4

2 に答える 2

2

を使用している場合、ポップアップを停止することはできません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 のサーバーへのリクエスト数が大幅に増加し、アプリケーションのパフォーマンスが低下するため、それぞれにこのパラメーターを設定しないように注意してください。

于 2012-05-21T14:44:40.577 に答える
0

ドキュメンテーションで読むことができるように、 facebook sdklogin()関数はデフォルトでポップアップを開きます。

それはあなたが行きたい方法ではありません。情報が役立つと思われる類似の質問が 2 つあります。

これこれを試してください。

于 2012-05-21T14:09:27.110 に答える