Метод Facebook JS SDK FB.api('/me') не возвращает поля, которые я ожидаю в Graph API v2.4 +
Я пытаюсь получить некоторую базовую информацию с помощью api, но до сих пор я получаю только имя пользователя и идентификатор. Как и в { name: "Juan Fuentes", id: "123456" }
Мне нужно получить подробную информацию, такую как электронная почта, имя, фамилия и день рождения.
Это мой код js
function facebookLogin() {
FB.login(function(response) {
var token = response.authResponse.accessToken;
var uid = response.authResponse.userID;
if (response.authResponse) {
FB.api('/me', 'get', { access_token: token }, function(response) {
console.log(response);
});
FB.api('/'+uid, 'get', { access_token: token }, function(response) {
console.log(response);
});
}
},
{ scope: 'public_profile' }
);
}
И это кнопка, которая активирует его
<a id="fb-login" href="#" onclick="facebookLogin()"></a>
Ответы
Ответ 1
Вам нужно вручную указать каждое поле, поскольку Graph API v2.4:
Декларативные поля
Чтобы повысить производительность в мобильных сетях, Nodes и Edges в версии 2.4 требуют, чтобы вы явно запрашивали поля, которые вам нужны для ваших запросов GET. Например, GET/v2.4/me/feed больше не включает в себя предпочтения и комментарии по умолчанию, но GET/v2.4/me/feed?fields=comments-likes вернет данные. Для получения дополнительной информации см. Документы о том, как запрашивать определенные поля.
например.
FB.api('/me', 'get', { access_token: token, fields: 'id,name,gender' }, function(response) {
console.log(response);
});
Ответ 2
Также можно использовать этот синтаксис для данных из области public_profile (проверено в Graph API версии 2.0):
FB.api('/me?fields=birthday,link,gender,age_range', function(response) {
console.log(response);
});
Вы можете проверить возможные значения в Интернете в API-интерфейсе графического API-интерфейса, просто нажмите кнопку "Получить токен":
https://developers.facebook.com/tools/explorer/?method=GET&path=me%3Ffields%3Dbirthday%2Clink%2Cgender%2Cage_range&version=v2.9
Ответ 3
Вот полный сценарий:
jQuery(document).ready(function () {
openLoginPopup();
})
function openLoginPopup() {
FB.getLoginStatus(function (response) {
if (response.status == 'connected') {
getCurrentUserInfo(response);
} else {
FB.login(function (response) {
if (response.authResponse) {
getCurrentUserInfo(response);
} else {
console.log('Auth cancelled.');
}
}, {scope: 'email'});
}
});
}
function getCurrentUserInfo() {
FB.api('/me?fields=id,email,first_name,last_name,name', function (userInfo) {
console.log(userInfo.name + ': ' + userInfo.email);
});
}
window.fbAsyncInit = function () {
FB.init({
// appId: 'xxxxxxxxxxxxxxxxxxxxx', //livemode
appId: 'xxxxxxxxxxxx', //testmode
cookie: true, // Enable cookies to allow the server to access the session.
xfbml: true, // Parse social plugins on this webpage.
version: 'v4.0' // Use this Graph API version for this call.
});
};
(function (d, s, id) { // Load the SDK asynchronously
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id))
return;
js = d.createElement(s);
js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
Спасибо.
Ответ 4
Обратите внимание, что электронная почта не всегда возвращается при вызове API me
с email
в качестве поля, даже если область действия email
была запрошена и предоставлена, например, если пользователь зарегистрировался с номером телефона:
https://developers.facebook.com/docs/facebook-login/permissions#reference-email