1

Facebook開発者の皆さん、こんにちは。

私は何十もの関連する質問を読み、できればdevelopers.facebook.comで関連するすべての例を試しましたが、これを機能させることができません:

  1. ユーザーが私の Web サイトにアクセスし、私が要求したアクセス許可を承認しました。

    FB.login(callback, {
        scope: 'publish_actions,user_actions:news,user_interests'
    });
    

    電話した後

    FB.init({
        appId: 'xxx', // App ID
        status: true, // check login status
        cookie: true,
        xfbml: true // parse XFBML
    });
    
  2. これで、しばらく有効なアクセス トークンを正常にリクエストし、それを使用してユーザーに関するあらゆる種類の情報を照会できるようになりました。

  3. どこ (Facebook または自分の Web サイト) からもログアウトせずに、そのページに再度移動すると (または単にリロードを押すと)、すぐに使用できると予想されます。

    FB.getLoginStatus(callback)
    

    の応答を受け取りますconnected。私の理解では、ユーザーはもう何もクリックする必要はありません。

しかし、私が得るのはunknown. どのブラウザーでも、実際の開発者プロファイルを使用しているか、Facebook のテスト ユーザーを使用しているかに関係なく。

私もイベントにサブスクライブしましたauth.authResponseChangeauth.statusChange、明示的に呼び出した場合にのみ発生しますFB.login()

Facebook SDK ドキュメントの例では、上記の myFB.init()は、ページの読み込み時に Facebook から必要な情報を取得する必要があり、それに応じてイベントが発生する必要があると述べています。

すでに非常に多くの例を試し、ドキュメントを理解していると本当に思っているので、どこでエラーが発生するのかわかりません。

見逃しているもの、誤解しているもの、または注意すべきタイミングの問題はありますか?

余談ですが、言及されたFacebookイベント以外にも、 を介したステータスの強制更新FB.getLoginStatus(callback, true)、ChromeのJavascriptコンソールにコードを入力してコードを段階的に実行すること、およびSOおよびFacebookフォーラムからの提案以外のことをすでに試しました。

4

2 に答える 2

1

を設定するstatus: trueと、FB.getLoginStatus応答オブジェクトはSDKによってキャッシュされ、以降の呼び出しはFB.getLoginStatusこのキャッシュされた応答からデータを返します。

これを回避するにはFB.getLoginStatus、2番目のパラメーターをtrueに設定して呼び出し、Facebookへのラウンドトリップを強制する必要があります。これにより、応答オブジェクトのキャッシュが効果的に更新されます。

例:

window.fbAsyncInit = function() {
    FB.init({
        appId  : '',
        status : true,
        cookie : true,
        xfbml  : true,
    });

    FB.getLoginStatus( function(response) {
        //console.log(response);
        if (response.status === 'connected') {
            var accessToken = response.authResponse.accessToken;
            alert(accessToken);
        } else if (response.status === 'not_authorized') {
            //login function
        } else {
            //login function
        }
    }, true);

    FB.Event.subscribe('auth.authResponseChange', function(response) {
        //console.log('The status of the session changed to: '+response.status);
        alert(response.status);
    });
};

ドキュメント:https ://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

于 2012-07-02T10:54:50.950 に答える
1

フィリップの受け入れられた回答への追加情報として、 Cookieブロッカーが自動ログインが機能しなかった実際の理由であることに言及したいと思います。

コードをテストして「現実世界」の条件を想定する前に、実行中のプラグインを必ず無効にしてください。

于 2012-07-06T08:14:09.717 に答える