API-интерфейс Facebook не возвращает адрес электронной почты
Изменить: Не дублировать, потому что:
- У меня есть разрешение
- Отладка маркера
- Код работает с тестовым пользователем.
Пожалуйста, не отмечайте как дубликат без чтения.
Я пытаюсь получить адрес электронной почты пользователя, но я не понимаю. В графическом api explorer, когда я нажимаю send, поле электронной почты становится серым и говорит, что:
Поле пусто или запрещено с помощью токена доступа
Но когда я отлаживаю токен, у него есть разрешение на использование электронной почты
Мой профиль имеет адрес электронной почты.
Обновление: я пробовал https://developers.facebook.com/tools/console/. Мой профиль ничего не возвращает, даже на другом компьютере. Но тот же код возвращает адрес электронной почты, имя и идентификатор другой учетной записи.
код:
<fb:login-button scope="email">
Grant Permissions to make more examples work
</fb:login-button>
<button onclick="doPost()">Post to Stream</button>
<script>
function userData() {
FB.api('/me?fields=name,email', Log.info.bind('/me callback'));
};
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
userData();
}
});
</script>
Вы можете заблокировать свое электронное письмо, чтобы никто не мог его использовать? Даже когда я предоставляю разрешение?
Ответы
Ответ 1
После того, как я получил отчет об ошибке, отмеченный как дубликат, и я прочитал все сообщения и ссылки там, я получил то, что вызвало эту проблему для меня и как исправить.
Проблема
Facebook иногда забывает, что ваше основное электронное письмо находится в графическом API (но оно все еще присутствует в настройках.)
Решение
Потребитель должен удалить сообщение, сохранить настройки, затем повторно добавить адрес, повторно подтвердить, а затем сделать его основным. Это зафиксировало мою учетную запись как в моем приложении для песочницы, так и в других приложениях, в которых Facebook не работает.
Ответ 2
The Marcus' ответ марка подводит меня к реальной проблеме, с которой я столкнулся.
Отладка с помощью инструмента Facebook Explorer. Мне удалось выяснить, что я должен установить область электронной почты с помощью метода FB.api()
после успешного входа в систему.
FB.login(function(response) {
if (response.status === 'connected'){
FB.api('/me?fields=id,email,name', function(data) {
console.log( data.email ) // it will not be null ;)
})
}, {scope: 'email'});
Это не совсем понятно в руководстве Quickstart, и я надеюсь, что это поможет и кому-то еще.
Ответ 3
У меня была такая же проблема, и я думаю, что узнал, почему:
Если у пользователя есть неподтвержденное электронное письмо в Facebook (например, Facebook отправил ему письмо с подтверждением на его адрес электронной почты, но он не ответил). Facebook НЕ отправит это письмо в ваше приложение, даже если он дал вам разрешения на электронную почту (!!!).
Итак, что я сделал, это его электронная почта Facebook, если у него есть имя пользователя (то есть [email protected]).
Ответ 4
В новом графике facebook требуются области, добавленные в запрос /me, как показано ниже:
/я = поля электронной почты, день рождения, место жительства, место действия, age_range, валюта, first_name, last_name, name_format, пол и усилитель;? Access_token =
Ответ 5
У меня была такая же проблема, когда я разрабатывал кнопку входа fb для моего сайта. У меня даже были настройки разрешений для моего приложения здесь:
https://developers.facebook.com/apps/<my-app-ID>/permissions
и он работал нормально для определенных начальных случаев, то есть он предоставлял электронную почту (я тестировал ее на своей собственной учетной записи, и она давала мой адрес электронной почты). Затем неожиданно он начал не отражать никакой электронной почты. После двух часов просмотра я понял, что возникла проблема с токеном доступа, когда я продолжал эту ссылку:
https://developers.facebook.com/tools/explorer/<your-fb-id>/?method=GET&path=100002451127858%3Ffields%3Did%2Cemail
Обновите свой -fb-id своим идентификатором и перейдите по ссылке выше. Нажмите "Получить токен доступа". На открывшейся вкладке нажмите "Расширенные разрешения", и в этом выберите "email" и отправьте. Теперь проверьте ваш запрос еще раз. Это определенно будет работать как на консоли, так и на вашем веб-сайте. Ура!:)
Ответ 6
Это известная ошибка. Если у пользователя нет адреса электронной почты, установленного в primary, запрос возвращает null для электронной почты. Задайте адрес электронной почты для своей учетной записи на https://www.facebook.com/settings?tab=account§ion=email&view, а затем попробуйте.
Источник: https://developers.facebook.com/bugs/298946933534016/
Ответ 7
Если у вас возникла та же проблема, замените основной адрес электронной почты Facebook на что угодно, затем верните его обратно. После долгих потянув за волосы, это заставило меня работать.