Facebook测试用户(为应用程序创建)在某些方面与普通用户的工作方式不同。 IE浏览器。他们不喜欢粉丝,所以你无法测试“create.edge”监听器是否设置正确。
有没有办法检测用户对应用程序进行身份验证是否为测试用户?实现虚假版本的对话框是有用的,测试用户不能使用(即喜欢粉丝页面)。
我的研究:
signed_request
,对于测试用户而言,它与普通用户相同。答案 0 :(得分:1)
您无法根据其图谱API详细信息检查用户是否为测试用户。同样,您无法检查用户是否喜欢特定页面。但是,您可以针对用户喜欢的页面列表检查page_id
。因此,为了确定给定user_id
是普通用户还是测试用户,您必须根据应用程序测试用户列表进行检查:
https://graph.facebook.com/APP_ID/accounts/test-users?access_token=APP_ID|APP_SECRET
所以流程将是这样的:
./likes
列表page_id
并退出成功./accounts/test-users
列表user_id
并退出成功这是一个额外的调用,但您可以安全地缓存结果以提高性能,因为测试用户无法转换为普通用户。我建议缓存“喜欢”检查一段时间,但YMMV。
答案 1 :(得分:0)
Facebook用户是否测试您可以更改名称和密码,否则返回错误代码(#200)您没有足够的权限来执行此操作
**我的解决方案:**
public function isTestUser($facebook_uid){
FacebookSession::setDefaultApplication(config_item('APP_ID'), config_item('APP_SECRET'));
$session = FacebookSession::newAppSession();
try {
$session->validate();
} catch (FacebookRequestException $ex) {
// Session not valid, Graph API returned an exception with the reason.
return FALSE;
} catch (\Exception $ex) {
// Graph API returned info, but it may mismatch the current app or have expired.
return FALSE;
}
$request = new FacebookRequest(
$session,
'POST',
'/'.facebook_uid,
array(
'password' => 'password',
'name' => 'Test Username'
)
);
try {
$response = $request->execute();
} catch (FacebookRequestException $ex) {
// (#200) You do not have sufficient permissions to perform this action
// (#100) Invalid password
// (#100) Invalid name
return ($ex->getCode() == 100) ? TRUE : FALSE;
} catch (\Exception $ex) {
return FALSE;
}
/*
object(Facebook\GraphObject)#1714 (1) {
["backingData":protected]=>
array(1) {
["success"]=>
bool(true)
}
}
*/
$graphObject = $response->getGraphObject();
return ($graphObject) ? TRUE : FALSE;
}