我继承了一个Facebook应用程序,它不能按预期100%运行。我不理解前一个开发人员的逻辑,但我在Facebook API中不够强大,无法重写它。
该应用有一个表单,用户(登录后)需要回答几个问题。当他点击提交时,我们想检查他是否喜欢该页面。只有表格才会提交表格。
window.fbAsyncInit = function() {
FB.init({
appId : '[myappid]',
channelUrl : '//www.myurl.com/channel.aspx',
status : true,
cookie : true,
xfbml : true
});
};
$("form input[type='submit']").on("click", function(e) {
e.preventDefault();
setTimeout(function() {
FB.api('/me/likes/MY-PAGE-ID',function(response) {
if(response.data) {
alert(response.data); // I get this (empty) alert
if(!isEmpty(response.data)) {
alert('all ok'); // I never get this :(
//$("form").submit();
} else {
alert("You must \"Like\" the page."); // Every time
}
}
});
}, 1000);
// Unrelated code edited out - end brackets may not match 100%
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
现在,在桌面上,这可以按预期工作。但是,在Android上却没有。它确实输入了第一个if(response.data) {
,但是应该返回数据的下一个警告框返回空。因此,它永远不会输入以下if语句。
我不理解的部分是为什么它进入第一个if(response.data
存在)而不是第二个(因为响应在某种程度上是空的,即使页面被喜欢)。
遗憾的是,我没有可以测试的其他设备。
我是否忽略了一些明显的明显错误?我能做些什么来挽救它?
答案 0 :(得分:0)
我明白了。似乎我没有要求必要的权限,因为我认为“喜欢”是基本信息的一部分。我意识到,傻了。
FB.login(function(response) {
// Truly amazing code goes here
}, { scope : 'user_likes' }); // Scope is important, yo
我不明白,为什么它适用于桌面,但不适用于移动设备,但我现在很高兴它能够正常运行。