Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook Open Graph为某些用户返回用户喜欢的空数据_Facebook_Facebook Graph Api_Oauth 2.0_Facebook Fql - Fatal编程技术网

Facebook Open Graph为某些用户返回用户喜欢的空数据

Facebook Open Graph为某些用户返回用户喜欢的空数据,facebook,facebook-graph-api,oauth-2.0,facebook-fql,Facebook,Facebook Graph Api,Oauth 2.0,Facebook Fql,我有一个页面,当用户允许使用该应用程序时,它会列出用户喜欢的页面,并使用FB.API检查用户是否喜欢我的某个facebook页面以及是否是该facebook页面的成员(在某种程度上两者都是类似的) 问题在于,无论是操作系统还是浏览器,某些用户根本不返回任何数据。我已经在应用程序上设置了“user_likes”权限,但没有用 <html> <head> <title>My Facebook Login Page</title> <

我有一个页面,当用户允许使用该应用程序时,它会列出用户喜欢的页面,并使用FB.API检查用户是否喜欢我的某个facebook页面以及是否是该facebook页面的成员(在某种程度上两者都是类似的)

问题在于,无论是操作系统还是浏览器,某些用户根本不返回任何数据。我已经在应用程序上设置了“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>

我已经应用了一些在这里找到的建议,但是脚本仍然不适合某些用户。除了在应用程序的用户和朋友权限设置中设置“用户喜好”之外,我不知道应该修改哪些特定的帐户/隐私/应用程序设置以允许查询用户的页面喜好。

您没有说明这种情况发生的频率,所以我假设

  • 这很少见
  • 您只询问当前用户,而不是他们的朋友
如果是这样的话,有些用户实际上并不喜欢,所以这很容易发生,也不应该成为问题


如果您可以验证用户是否有喜好,并且已使用user_likes权限授权您的应用程序,请在中提交一个bug,并包括用户ID、页面ID、访问令牌等

这可能与此可复制bug有关:
更多信息,请阅读我的帖子。

我在这篇帖子中发布了一个解决JS api类似问题的详细方案:

您是否尝试使用Firebug控制台检查脚本是否出错?控制台中是否出现任何错误?根本没有记录任何错误。问题是,代码显然可以获取用户名,但是当涉及到likes时,它不会返回任何值。哎呀,绝对没有任何错误,因为我使用的帐户能够检查它的页面likes。我可能需要稍后获得我朋友的帐户,因为他的帐户遇到这种情况。是否必须尝试使用Graph API Explorer来确保确实存在问题?事实上,我有两个用户接触过这个问题,并且至少有60多个用户报告我们的模块有问题,在接受我们的应用程序后,我们使用这个代码检查用户的喜好。我还没有确认他们是否已经授权我的应用程序使用“用户喜欢”。但是,你怎么一开始就不允许这样?当您收到oauth对话框提示时,您是否会选择应用程序要求您的数据,当您接受时,对吗?我已经尝试过资源管理器。应用程序已设置为“我的应用程序”,并选择了访问令牌“user_likes”。然后使用Graph API,get方法Graph.facebook.com//likes/,不返回任何数据。这是否意味着用户不允许“user_likes”是正确的?但我很困惑,这将如何被禁止,这可以追溯到我在这个评论线程中的第一个问题。“用户喜欢”已应用于该应用程序。否
/me/permissions
检查他们是否已授予权限,
/likes/
让您知道他们是否喜欢我看到的页面。我尝试了那个用户,但只安装了:1,但没有用户喜欢:1。我让他在登录帐户的情况下访问此代码。您应该包括更多关于此代码段如何实际解决原始答案的详细信息。
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
        }
    }
);
if(jQuery.type(response.data[i].location) == 'object' )