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