web-dev-qa-db-ja.com

FB.getLoginStatusがコールバックを呼び出さない

タイトルは本当にそれをすべて言います。一部の(未決定の)条件下では、FB.getLoginStatus()が機能を停止し、指定したコールバックを呼び出さない。私が見つけた唯一の興味深い手がかりは

  • FB.Auth._loadStateが「読み込み中」でスタックしている-クリックして「読み込み中」になるはずのことは何も起こっていない
  • alert()呼び出しを入れるようなわずかな遅延は、それが機能し始める傾向があります

この歓迎を調査する方法についてさえ、まったくヒントはありません。

23
Malvolio

これは通常、Facebookに登録されているドメインとは異なるドメインでページを実行しているときに発生します。通常、これは私がローカルで開発しているときです。

ローカルで実行している場合は、ローカルマシンでテストするために、ローカルWebサーバーをセットアップしてから、hostsファイルを変更して登録済みドメインが127.0.0.1を指すようにする必要があります。サーバーでテストする場合は、hostsファイルからその行を削除することを忘れないでください。

29
Jeff

による:

https://developers.facebook.com/bugs/240058389381072

アプリケーションをサンドボックスモードにすることはできません。そうしないと、機能しません。アプリの設定に移動し、詳細設定して切り替えます。これは、バグレポートに遭遇するまで、数時間私を困惑させました。

12
Wilhelm

FBAPIでも同様の問題がありました。私のFacebookアプリが正しく構成されていないことが判明しました。これが当てはまらないことを確認してください。私の問題は、FBアプリケーションの "Site URL" paramがhttpsを指していることでしたが、開発にはhttpプロトコルを使用していました。 FB.initの後のFBapiに対する呼び出しは、コールバック関数を呼び出していませんでした。したがって、最初に行うことは、アプリの構成を再確認することです。

さて、何らかの理由でFB apiに依存しているが、それが機能しない場合に備えてフォールバックオプションが必要な場合は、タイマーを使用した回避策で問題ありません。タイマーを設定し、FBApiから適切な応答が得られたら無効にします。そうでない場合-いくつかの追加ロジックを実行するカスタム関数へのフォールバック。

 function callFbApi() {
    var timeoutHandler = setTimeout(function() { requestFailed(); }, 1000);

    function requestFailed() {
        // When this happens, it means that FB API was unresponsive
        doSomeFallbackWork();
        alert('hey, FB API does not work!');
    }

    FB.getLoginStatus(function(response) {
        clearTimeout(timeoutHandler); // This will clear the timeout in case of proper FB call
        doSomeUsualWorkAfterFbReplies();

        return false;
    }, true);
 }
12
ŁukaszBachman

非同期呼び出しを使用している可能性があります。 window.fbAsyncInitを使用してFB.initを呼び出したときにも同じことが起こりました。私がしたのは、setTimeout関数でFB.getLoginStatusを遅らせることだけでした

  window.setTimeout(checkLogStatus, 1000);


  function checkLogStatus(){
          alert("check");
          // fetch the status on load      
          FB.getLoginStatus(handleSessionResponse);
  }

その後はうまくいったようです

6
Kasey Thomas

アプリケーションがサンドボックスモードの場合、Facebookは、アプリケーション開発者としてリストされていない人にはアプリケーションが見えないように動作します。ログインしていない場合は、アプリが非表示になっているのは当然のことです。

コールバックは、表示されているアプリケーションで初期化している場合にのみ発生します。それ以外の場合は、次の応答が返されます。

<span>Application Error: There was a problem getting data for the application you requested. The application may not be valid, or there may be a temporary glitch. Please try again later. </span>

詳細については、このバグチケットに関する私のコメントを参照してください: https://developers.facebook.com/bugs/240058389381072

6
Philip Bulley

新しいバージョンのDeveloperアプリでは、アプリケーションへのアクセスに使用している正しいURLを[Website]フィールドの下に配置していることを確認する必要があります。

アプリをFacebookと統合する方法を選択してください

セクション。

1
abahgat

私も同様の問題を抱えていました。ブラウザを開くたびにサイトは機能しましたが、リロードしようとすると失敗します。

原因は、Facebook構成のサイト名に「www」がないことでした。 「www」(www.yoursite.comなど)を配置すると、両方の状況(yoursite.comまたはwww.yoursite.com)で機能することに注意してください。

1
Erick Skrabe

プロトコルが[〜#〜] https [〜#〜]であり、HTTPではないことを確認してください。

1
Zorayr

私が呼んでいた状況を投稿するだけでFB.getLoginStatusまったく応答がありません。

私のアプリケーションはタブで実行するように設計されており、アプリの管理ページにページタブのURLのみを入力し、Facebookのアプリ(つまりキャンバス)のURLは入力しませんでした。タブは完全に読み込まれますが、FB JSSDKを呼び出しても応答がありません。

0
Tim

他の人が投稿したように、あなたはフェイスブックが期待するのと同じURLであなたのサイトにアクセスしているに違いありません。たとえば、Facebookに「example.com」というコールバックがあり、ブラウザに「www.example.com」がある場合、この問題が発生する可能性があります。

さらに、サードパーティのCookieがブラウザで許可されていない場合も、この問題が発生する可能性があります。または、コールバックが表示される場合があります ユーザーが接続されていないことを誤って報告します

0
Dave Cohen