无法检测Facebook的页面

Is there any Facebook settings or browser settings or firewalls or browser plugins etc that can prevent a Facebook app from checking whether a user liked a certain page (user already gave permission to access basic information btw)? I tried 3 methods, but for some users the detection failed (or sometimes failed). Below are the methods I tested

FQL Query

public function getLikedUser($user_id, $page_id){
  $result = $this->facebookObject()->api(array(
    "method" => "fql.query",
    "query" => "SELECT uid FROM page_fan WHERE uid=$user_id AND page_id=$page_id"
  ));

  if(count($result)){
    return true;
  }else{
    return false;
  }
}

REST api

public function getLikedUser($user_id, $page_id){

  $like = $this->facebookObject()->api($user_id.'/likes/'.$page_id);

  if(!empty($like['data'])){
    return true;
  } else {
    return false;
  }
}

Graph API

public function getLikedUser($user_id, $page_id){
  $like = file_get_contents("https://graph.facebook.com/".$user_id."/likes/".$page_id."&access_token=".$this->facebookObject()->getAccessToken());
  $likeD = json_decode($like);  
  if(!empty($likeD->data)){
    return true;
  } else {
    return false;
  }
}

But sometimes they failed. Anyone know why for some users, or sometimes the page like detection can fail?

As described in documentation for page_fan table:

To read the page_fan table you need

  • any valid access_token if it is public (visible to anyone on Facebook).
  • user_likes permissions if querying the current user.
  • friends_likes permissions if querying a user's friend.

likes connection for user behaves the same way.

You need your users to grant user_likes permission to be able to check if user liked particular page (otherwise there will be cases you will not get that info).