2011-12-13 5 views
2

FB.initの直後に呼び出されたときにFB.apiが機能しません。 )((FB.initの直後に呼び出されたときにFB.apiが機能しない

window.fbAsyncInit = function() { 
    FB.init({ 
    appId : window.APP_ID, 
    status : true, 
    cookie : true, 
    oauth : true, 
    channelUrl : window.MASTER_URL + "channel", 
    frictionlessRequests : true 
    }); 

    window.COMPANY.init(); 
}; 

(function() { 
    var e = document.createElement('script'); 
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
    e.async = true; 
    document.getElementById('fb-root').appendChild(e); 
}()); 

そして、ここでは私のCOMPANY.initある)とCOMPANY.fetchAllFriends::ここで私が使用したコードスニペットはある

fetchAllFriends応答で「アクティブなアクセスを言うエラーが含まれてい
friends: new Array(), 

init : function() { 
    // TODO 

    COMPANY.fetchAllFriends(); 

    FB.Canvas.setSize($(document).height()); 
    FB.Canvas.setAutoGrow(); 
},  

fetchAllFriends : function() { 
    FB.api('/me/friends', function(response) { 
    if (!response || response.error) { 
     return; 
    } 

    COMPANY.friends = new Array(); 
    $.each(response.data, function(index, value) { 
     COMPANY.friends.push(value.id); 
    }); 
    }); 
}, 

トークンを使用して現在のユーザーに関する情報を照会する必要があります。 "私はFB.apiの呼び出しの前にFB.initが呼び出されていることを(ブラウザのデバッガを介して)確認しました。

ご協力いただければ幸いです!

答えて

5

私の問題は解決しました。私が変更されました:

window.fbAsyncInit = function() { 
    FB.init({ 
    appId : window.APP_ID, 
    status : true, 
    cookie : true, 
    oauth : true, 
    channelUrl : window.MASTER_URL + "channel", 
    frictionlessRequests : true 
    }); 

    FB.Event.subscribe('auth.login', window.COMPANY.init); 
}; 

た場合に誰が知りたい:

window.fbAsyncInit = function() { 
    FB.init({ 
    appId : window.APP_ID, 
    status : true, 
    cookie : true, 
    oauth : true, 
    channelUrl : window.MASTER_URL + "channel", 
    frictionlessRequests : true 
    }); 

    window.COMPANY.init(); 
}; 

に。私が見つけたのは、FB JS SDKはFB.initが返ってくるまでにユーザーセッションを形成していないため、init関数で 'auth.login'イベントを購読するだけです。 More info here

2

ユーザーの状態を確認していないようです。あなたがしているのはFacebookを初期化することだけです。ユーザーがFacebookにログインしているのか、Facebookアカウントを持っているのかはわかりません。 FB.getLoginStatusを呼び出し、それらが "接続されている"かどうかを確認する必要があります。接続されていない場合、アクセストークンを取得する方法はありません。接続されている場合は、アクセストークンを取得します。

+0

FB.getLoginStatusを明示的に呼び出すか、呼び出しにトークンを置くことなく、ページがロードされた後に呼び出されたときに 'fetchAllFriends'メソッド(上記で定義)が完全に機能する理由については説明しません。 .. –

+0

私のアプリはFacebookキャンバスページに埋め込まれており、ユーザーを認証するディスパッチページの背後にあるので、上記のメソッドが呼び出された時点で、ユーザーがFacebookにログインしていることが確認されます。 –

+1

私はまだgetLoginStatusを呼び出し、必要なものをその関数のコールバックで実行することをお勧めします。それはすべてが準備ができていることを保証します。しかし、それをしたくない場合は、FB.Event.subscribeを使用することをお勧めします。おそらくauth.statusChangeを購読しています。ディスパッチページを持っているにもかかわらず、Facebookは依然としてユーザーステータスを確認する必要があります。 Facebookはディスパッチ・ページがあることを知らない。 –

関連する問題