簡體   English   中英

FB.API Facebook打開圖返回某些用戶喜歡的空數據

[英]FB.API Facebook Open Graph returns empty data for user likes for some users

我有一個頁面,當用戶允許該應用程序時,它將列出該用戶的喜歡頁面,並檢查該用戶是否喜歡我的某個Facebook頁面,並且是該Facebook頁面的成員(兩者相似) ,使用FB.API

問題是某些用戶根本不返回任何數據,而與操作系統或瀏覽器無關。 我已經在應用程序上設置了“ user_likes”權限,但無濟於事。

    <html> 
<head> 
<title>My Facebook Login Page</title> 
</head> 
<body> 
    <div id="fb-root"></div> 
    <div id="lblName"></div> 
    <div id="lblAccessToken" style="display: none;"></div> 
    <br><br> 
    <fieldset> 
        <legend>Your Page Likes</legend> 
        <div id="lblLikes"></div> 
    </fieldset> 

    <fieldset> 
        <legend>Check whether you like [My Fan Page] </legend> 
        <div id="lblYouLike"></div> 
    </fieldset> 

    <fieldset> 
        <legend>Check whether you are a fan of [My Fan Page]</legend> 
        <div id="lblMem"></div> 
    </fieldset> 
    <div id="divLogin" style="display:none;"> 
    <div class="fb-login-button">Login with [App]</div> 
</div> 
<script> 
    var accessToken; 
    var uid; 
    var lblName = document.getElementById("lblName") 
    var divLogin = document.getElementById("divLogin") 
    var lblAccessToken = document.getElementById("lblAccessToken") 
    var lblLikes = document.getElementById("lblLikes") 
    var lblYouLike = document.getElementById("lblYouLike") 
    var lblMem = document.getElementById("lblMem") 

    window.fbAsyncInit = function () { 
        FB.init({ 
            appId: 'APP_ID', // App ID 
            channelUrl : 'http://www.example.com/testing/channel.html', // Channel File 
            status: true, // check login status 
            cookie: true, // enable cookies to allow the server to access the session 
            xfbml: true // parse XFBML 
        }); 

        FB.getLoginStatus( 
            function (response) { 
                checkStatus(response) 
            } 
        ); 

        FB.Event.subscribe( 
            'auth.authResponseChange', 
            function (response) { 
                checkStatus(response) 
            } 
        ); 

        FB.Event.subscribe( 
            'edge.create', 
            function (response) { 
                //alert('You liked the URL: ' + response); 
                ufCheckLike() 
            } 
        ); 
    }; 

    // Load the SDK Asynchronously 
    ( 
        function(d){ 
            var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
            if (d.getElementById(id)) {return;} 
            js = d.createElement('script'); 
            js.id = id; 
            js.async = true; 
            js.src = "//connect.facebook.net/en_US/all.js"; 
            ref.parentNode.insertBefore(js, ref); 
        } (document) 
    ); 

    function checkStatus(response){ 
        if (response.status === 'connected') { 
            uid = response.authResponse.userID; 
            accessToken = response.authResponse.accessToken; 

            lblAccessToken.innerHTML = accessToken; 

            FB.api( 
                '/me', 
                'get', 
                function(response) { 
                    lblName.innerHTML = response.name; 
                } 
            ); 

            divLogin.style.display = "none"; 

            ufCheckLike() 
        } 
        else { 
            divLogin.style.display = ""; 
        } 
    } 

    function ufCheckLike() { 
        if (isLoggedIn()) { 
            FB.api( 
                '/me/likes?' + 
                'access_token=' + accessToken, 
                'get', 
                    function(likes) { 
                        if (likes) { 
                            if (likes.data && likes.data.length > 0) { 

                                for (var i = 0; i < likes.data.length; i++) { 
                                    var like_detail = likes.data[i] 
                                    var lsHTML = like_detail.name + " : " + like_detail.id + "<br>" 
                                    if(like_detail.id == "<PAGE_ID>") 
                                        lblLikes.innerHTML = lsHTML + lblLikes.innerHTML 
                                    else 
                                        lblLikes.innerHTML += lsHTML 
                                } 

                            } 
                        } 
                    } 
            ); 

            FB.api( 
                '/me/likes/<PAGE_ID>?' + 
                'access_token=' + accessToken, 
                'get', 
                function(likes) { 
                    if (likes) { 
                        if (likes.data && likes.data.length > 0) { 
                            lblYouLike.innerHTML = "You Like [Fan Page]!" 
                        } 
                    } 
                } 
            ); 

            FB.api( 
                '/<PAGE_ID>/members/' + uid + '?' + 
                'access_token=' + accessToken, 
                'get', 
                function(likes) { 
                    if (likes) { 
                        if (likes.data && likes.data.length > 0) { 
                            lblMem.innerHTML = "You are a fan of [Fan Page]!" 
                        } 
                    } 
                } 
            ); 

        } 

    } 

    function isLoggedIn() { 
        if (!accessToken) { 
            divLogin.style.display = ""; 
            return false; 
        } 
        return true; 
    } 
</script> 
</body> 
</html>

我還實現了FQL,實際上它執行相同的操作來檢查用戶是否喜歡我的頁面,並且在某些對象(數據對象返回空行)上發生了相同的情況。

var query = "SELECT uid FROM page_fan  where uid=me() and page_id = PAGE_ID ' + 'and access_token = " + accessToken;
//Access token is optional
var names = FB.Data.query(query);
names.wait(
    function (rows) {
        if (rows.length > 0) {
            // liked, do codes here
        }
        else {
            // not yet liked, show like button
        }
    }
);

我已經應用了此處找到的一些建議,該腳本對於某些用戶仍然不起作用。 除了在應用程序的用戶和朋友權限設置中設置“ user_likes”外,我不知道應該修改哪些特定的帳戶/隱私/應用程序設置以允許查詢用戶的頁面贊。

您沒有跡象表明這種情況發生的頻率,所以我假設

  • 很少見
  • 您只是在詢問當前用戶,而不是他們的朋友。

如果是這樣,則某些用戶實際上沒有任何喜歡,因此這很容易發生並且不應該成為問題。

如果您可以驗證用戶確實喜歡,並且已使用user_likes權限授權您的應用,請在Facebook的錯誤跟蹤器中提交錯誤,並包括用戶ID,頁面ID,訪問令牌等

這可能與該可復制錯誤有關: http : //developers.facebook.com/bugs/106991419491608在此處閱讀我的文章以獲取更多信息。

我在這篇文章中針對與JS api相似的問題發布了詳細的解決方案: 為什么Facebook API會為相冊返回一個空數組?

if(jQuery.type(response.data[i].location) == 'object' )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM