FB.API Facebook Open Graph 为某些用户的用户点赞返回空数据
Posted
技术标签:
【中文标题】FB.API Facebook Open Graph 为某些用户的用户点赞返回空数据【英文标题】:FB.API Facebook Open Graph returns empty data for user likes for some users 【发布时间】:2012-06-21 03:05:01 【问题描述】:我有一个页面,当用户允许该应用程序时,它会列出用户的页面喜欢,并检查用户是否喜欢我的某个 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”之外,我不知道应该修改哪些特定帐户/隐私/应用程序设置以允许查询用户的页面喜欢。
【问题讨论】:
您是否尝试使用 Firebug 控制台检查脚本出了什么问题? 控制台是否有错误提示? 根本没有记录任何错误。问题是,代码显然可以获取用户的姓名,但是当涉及到点赞时,它不会返回任何值。 哎呀,绝对没有错误,因为我使用的帐户能够检查它的页面喜欢。我可能需要稍后获取我朋友的帐户,因为他的帐户正在经历这种情况。 必须尝试使用 Graph API Explorer 以确保确实存在问题? developers.facebook.com/tools/explorer 【参考方案1】:你没有说明这种情况发生的频率,所以我假设
很少见 您只询问当前用户,而不是他们的朋友。如果是这样,一些用户实际上没有任何喜欢,所以这很容易发生并且不应该成为问题。
如果您可以验证用户确实有喜欢,并且已使用 user_likes 权限授权您的应用,请在 Facebook's bug tracker 中提交错误并包括用户 ID、页面 ID、访问令牌等
【讨论】:
实际上,我有两个与我有过联系的用户遇到了这个问题,并且至少有 60 多个用户报告我们的模块存在问题,该模块使用此代码检查用户在接受我们的喜欢后应用程序。我尚未确认他们是否已使用“user_likes”授权我的应用程序。不过,您如何一开始就不允许这样做?当您收到 oauth 对话框提示时,您是否会选择在您接受时选择应用程序对您的数据的要求? 我已经尝试过资源管理器。应用程序设置为我的应用程序,访问令牌选择了“user_likes”。然后使用 Graph API,get 方法,graph.facebook.com/<user_id>/likes/<page_id>,没有数据返回。这是否意味着用户不允许“user_likes”正确? 但是我很困惑这怎么会被禁止,这可以追溯到我在这个评论线程中的第一个问题。 'user_likes' 已应用于应用。 no/me/permissions
检查他们是否已授予权限,/<user>/likes/<page>
让您知道他们是否喜欢该页面
我明白了。我尝试使用该用户,但我只安装了:1,但没有 user_likes:1。我让他在登录帐户的情况下访问此developers.facebook.com/tools/explorer/<my_app_id>/…。【参考方案2】:
这可能与这个可重现的错误有关: http://developers.facebook.com/bugs/106991419491608 阅读我的帖子了解更多信息。
【讨论】:
【参考方案3】:我在这篇文章中发布了针对 JS api 遇到的类似问题的详细解决方案: Why is the Facebook API returning an empty array for albums?
【讨论】:
【参考方案4】:if(jQuery.type(response.data[i].location) == 'object' )
【讨论】:
您应该包含更多关于此代码 sn-p 如何实际解决原始答案的详细信息。以上是关于FB.API Facebook Open Graph 为某些用户的用户点赞返回空数据的主要内容,如果未能解决你的问题,请参考以下文章
通过图形 api 方法 fb.api() 获取页面的选项卡并将选项卡添加到 facebook 页面会导致错误
Facebook JS SDK 的 FB.api('/me') 方法不返回我在 Graph API v2.4+ 中期望的字段