我成功地从我的Android应用程序中获得了访问令牌。。。
fbbutton = (com.facebook.login.widget.LoginButton) findViewById(R.id.fbbutton);
fbbutton.setOnClickListener(this);
fbbutton.setReadPermissions(Arrays.asList("public_profile", "email"));
callbackManager = CallbackManager.Factory.create();
fbbutton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
if (response.getError() != null) {
} else {
if ((email = object.optString("email")) != null) {
} else {
email = object.optString("id") + "@facebook.com";
}
editor.putString("ftoken", AccessToken.getCurrentAccessToken().toString());
editor.apply();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, name, email"); // facebook parameters
request.setParameters(parameters);
request.executeAsync();
// signed in UI
}
然后,我成功地将访问令牌发送到服务器的php脚本中。
我正试图让脸书在服务器端使用访问令牌给我用户的电子邮件。
我正在努力。。。
require_once __DIR__ . '/facebook-php-sdk-v4/src/Facebook/autoload.php';
(…)
$fb = new Facebook'Facebook([
'app_id' => '491680537671890',
'app_secret' => 'abe9f51094b3d7c9edb3c28d102170a1',
'default_graph_version' => 'v2.4'
]);
fwrite($Handle, "point 1");
$response = $fb->get('/me', $ftoken);
//print_r($response);
fwrite($Handle, "response:$response'n'n");
$email = $response["email"];
$userid = $email;
fwrite($Handle, "email confirmed by facebook:[$email]'n'n");
但是我的php代码只到了"第1点"。所以它在$fb->get阶段失败了。我做错了什么?谢谢你的帮助。
编辑:我忘记在最后一个数组项后面加逗号了
$fb = new Facebook'Facebook([
'app_id' => '491680537671890',
'app_secret' => 'abe9f51094b3d7c9edb3c28d102170a1',
'default_graph_version' => 'v2.4',
]);
现在,我的代码甚至还没有到达点1。
编辑:逗号显然无关紧要,但我把它去掉了,我又到了点1[我错了,逗号真的没什么区别]。但是var_dumps在我下面编程时是空的。。
$ftoken = $json->ftoken;
fwrite($Handle, "ftoken:$ftoken'r'n");
$fb = new Facebook'Facebook([
'app_id' => '491680537671890',
'app_secret' => 'abe9f51094b3d7c9edb3c28d102170a1',
'default_graph_version' => 'v2.4'
]);
$vardump = var_dump($fb);
fwrite($Handle, "first vardump:$vardump'n'n");
$response = $fb->get('/me?fields=id,name', $ftoken);
$vardump = var_dump($response);
fwrite($Handle, "vardump:$vardump'n'n");
编辑:#3:我实现了以下建议的代码。。。
$ftoken = $json->ftoken;
fwrite($Handle, "ftoken:$ftoken'r'n");
$fb = new Facebook'Facebook([
'app_id' => '491680537671890',
'app_secret' => 'abe9f51094b3d7c9edb3c28d102170a1',
'default_graph_version' => 'v2.4'
]);
$fb->setDefaultAccessToken($ftoken);
try {
$response = $fb->get('/me');
$userResponse = $response->getGraphUser();
} catch(Facebook'Exceptions'FacebookResponseException $e) {
// When Graph returns an error
$userResponse = 'Graph returned an error: ' . $e->getMessage();
} catch(Facebook'Exceptions'FacebookSDKException $e) {
// When validation fails or other local issues
$userResponse = 'Facebook SDK returned an error: ' . $e->getMessage();
}finally{
fwrite($Handle, "response:$userResponse'n'n");
}
我得到。。。
response:Graph returned an error: Invalid OAuth access token.
所以我的代币类型似乎不正确?
编辑:#4:我去了facebook对象调试页面,并输入了令牌。。。
Access Token Info
App ID xxxxxxxxxxxxxxxxx : recipes
User ID
xxxxxxxxxxxxxxxxxxxxxxxxx : Rxxn Kxxm
User last installed this app via API v2.x
Issued 1451792399 (20 hours ago)
Expires 1456976399 (in about 2 months)
Valid True
Origin Mobile Web Faceweb
Scopes email, public_profile
因此,代币不应该有任何真正的问题。我被难住了。
您可以尝试以下
$ftoken = $json->ftoken;
fwrite($Handle, "ftoken:$ftoken'r'n");
$fb = new Facebook'Facebook([
'app_id' => '491680537671890',
'app_secret' => 'abe9f51094b3d7c9edb3c28d102170a1',
'default_graph_version' => 'v2.4'
]);
$fb->setDefaultAccessToken($ftoken);
try {
$response = $fb->get('/me');
$userResponse = $response->getGraphUser();
} catch(Facebook'Exceptions'FacebookResponseException $e) {
// When Graph returns an error
$userResponse = 'Graph returned an error: ' . $e->getMessage();
} catch(Facebook'Exceptions'FacebookSDKException $e) {
// When validation fails or other local issues
$userResponse = 'Facebook SDK returned an error: ' . $e->getMessage();
}finally{
fwrite($Handle, "response:$userResponse'n'n");
}
看看我们得到了什么。。。
请确保您的域在您的应用程序设置中