我正在创建一个facebook应用程序生成器。我需要检查用户当前是否在此Facebook页面上添加了应用程序。
为了做到这一点,我首先要求facebook api提供他的页面列表。然后我遍历所有页面。并在每个页面上请求应用程序。
最后,我将appId与刚刚创建的用户进行比较,并相应地显示警告。
问题是,当我循环遍历每个pageId并请求子页面的FbApi时,请求响应被延迟,并且for each循环在从facebook获取结果之前完成其循环。
这是我的代码,这是非常复杂的......任何解决问题的想法都非常受欢迎。
FB.login(function (response) {
FB.api('/me/accounts', function (apiresponse) {
var totalPages = apiresponse.data.length;
var pageIndex = 0;
$.each(apiresponse.data, function (pageNumber, pageData) {
var pageAccessToken = pageData.access_token;
var tabPageName = pageData.name;
var tabPageId = pageData.id;
FB.api("/" + tabPageId + "/tabs", function (response) {
var foundApp = false
$.each(response.data, function (index, value) {
var exsistingAppId = (value.id).split("app_").pop();
if (exsistingAppId == fbAppId) {
foundApp = true;
}
});
if (foundApp === true) {
var data = {
PageId: tabPageId,
Url: window.location.href.split("/").pop()
}
$.ajax({
type: "POST",
url: '/facebook/Match',
contentType: "application/json",
data: JSON.stringify(data),
success: function (data) {
if (data == "True") {
$("#addToFacebookModal ul").append("<li><span class='pageTab'><a class='pageTabName' target='_blank' href='https://facebook.com/profile.php?id=" +tabPageId + "'>" +tabPageName + "</a></span><a class='deleteAppFromPageTab' data-id='" +tabPageId + "' data-accessToken='" +pageAccessToken + "'>[x]</a></li>");
alreadyAdded.push(true);
} else {
alreadyAdded.push(false);
}
pageIndex++;
if (pageIndex == totalPages) {
console.log("Total Pages = " + totalPages + ", Looped through = " + alreadyAdded.length);
if (alreadyAdded.indexOf(true) >= 0) {
$("#addToFacebookModal").modal();
} else {
addToFacebook();
}
}
}
});
}
else {
pageIndex++;
}
});
});
});
}, { scope: 'manage_pages' });
这是我正在做的伪代码
var myVariable -Fb.Api回调函数返回响应数组 - 遍历响应数组 - 根据该数组中的先前响应获取新的Response数组 - 遍历新响应数组的每个项目,并将其与myVariable进行比较。
问题是在响应到达之前循环结束时响应被延迟。因为我无法比较嵌套的项目与myVariable。
答案 0 :(得分:0)
如果通过&#34; facebook页面&#34;您指的是商家页面/组织页面(不是个人资料),您可以通过检查端点&#39; / {{page_id}} / tabs / {{app_id}}来更轻松地获取相同的信息。
将page_id替换为您要检查的网页的ID,并将app_id替换为您的应用ID。我目前没有工作代码,但是这样的话:
FB.api(
'/' + checkPageID + '/tabs/{{app_id}}',
function (response) {
// Do console.log(response) to figure out how to see if installed or not
}
)
答案 1 :(得分:0)
你可以使用字段扩展:
https://developers.facebook.com/docs/graph-api/using-graph-api/v2.3#fieldexpansion
FB.api('/me/accounts', {fields: 'name, address{city}'},function (response)
{
//do something here.
}