0

我继承了一个 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.dataexists) 而不是第二个(因为响应在某种程度上是空的,即使页面被喜欢)。

遗憾的是,我没有其他设备可以测试。

我是否忽略了一些明显的错误?我能做些什么来挽救它?

4

1 回答 1

0

我想到了。看来我并没有要求必要的权限,因为我认为“喜欢”是基本信息的一部分。我很傻,我意识到。

FB.login(function(response) {
  // Truly amazing code goes here
}, { scope : 'user_likes' }); // Scope is important, yo

我不明白为什么它可以在桌面上运行,但不能在移动设备上运行,但我很高兴它现在可以运行。

于 2013-09-01T14:16:59.043 回答