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).