タイトルは本当にそれをすべて言います。一部の(未決定の)条件下では、FB.getLoginStatus()が機能を停止し、指定したコールバックを呼び出さない。私が見つけた唯一の興味深い手がかりは
alert()
呼び出しを入れるようなわずかな遅延は、それが機能し始める傾向がありますこの歓迎を調査する方法についてさえ、まったくヒントはありません。
これは通常、Facebookに登録されているドメインとは異なるドメインでページを実行しているときに発生します。通常、これは私がローカルで開発しているときです。
ローカルで実行している場合は、ローカルマシンでテストするために、ローカルWebサーバーをセットアップしてから、hostsファイルを変更して登録済みドメインが127.0.0.1を指すようにする必要があります。サーバーでテストする場合は、hostsファイルからその行を削除することを忘れないでください。
による:
https://developers.facebook.com/bugs/240058389381072
アプリケーションをサンドボックスモードにすることはできません。そうしないと、機能しません。アプリの設定に移動し、詳細設定して切り替えます。これは、バグレポートに遭遇するまで、数時間私を困惑させました。
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);
}
非同期呼び出しを使用している可能性があります。 window.fbAsyncInitを使用してFB.initを呼び出したときにも同じことが起こりました。私がしたのは、setTimeout関数でFB.getLoginStatusを遅らせることだけでした
window.setTimeout(checkLogStatus, 1000);
function checkLogStatus(){
alert("check");
// fetch the status on load
FB.getLoginStatus(handleSessionResponse);
}
その後はうまくいったようです
アプリケーションがサンドボックスモードの場合、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
新しいバージョンのDeveloperアプリでは、アプリケーションへのアクセスに使用している正しいURLを[Website]フィールドの下に配置していることを確認する必要があります。
アプリをFacebookと統合する方法を選択してください
セクション。
私も同様の問題を抱えていました。ブラウザを開くたびにサイトは機能しましたが、リロードしようとすると失敗します。
原因は、Facebook構成のサイト名に「www」がないことでした。 「www」(www.yoursite.comなど)を配置すると、両方の状況(yoursite.comまたはwww.yoursite.com)で機能することに注意してください。
プロトコルが[〜#〜] https [〜#〜]であり、HTTPではないことを確認してください。
私が呼んでいた状況を投稿するだけでFB.getLoginStatus
まったく応答がありません。
私のアプリケーションはタブで実行するように設計されており、アプリの管理ページにページタブのURLのみを入力し、Facebookのアプリ(つまりキャンバス)のURLは入力しませんでした。タブは完全に読み込まれますが、FB JSSDKを呼び出しても応答がありません。
他の人が投稿したように、あなたはフェイスブックが期待するのと同じURLであなたのサイトにアクセスしているに違いありません。たとえば、Facebookに「example.com」というコールバックがあり、ブラウザに「www.example.com」がある場合、この問題が発生する可能性があります。
さらに、サードパーティのCookieがブラウザで許可されていない場合も、この問題が発生する可能性があります。または、コールバックが表示される場合があります ユーザーが接続されていないことを誤って報告します 。