Я успешно получил токен доступа из своего приложения для 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-скрипт моего сервера.
Я пытаюсь заставить Facebook отправлять мне электронную почту пользователя на стороне сервера, используя токен доступа.
Я пытаюсь как таковой …
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");
}
и посмотрим, что мы получим …
Убедитесь, что ваш домен находится в настройках вашего приложения!
Других решений пока нет …