Подтвердить что ты не робот

Прерывистый недостающий адрес электронной почты в API facebook

Мое приложение использует запрос "https://graph.facebook.com/me" с токеном OAuth для получения свойств о пользователе. Адрес электронной почты является одним из необходимых нам свойств, и мы выполняем запрос на объяснение этого разрешения, когда мы запрашиваем доступ.

Он работает отлично в 99% случаев, но в некоторых случаях ответ возвращается без какого-либо объекта в данных jSON с именем "email".

Есть ли объяснение, почему это может произойти, например, как пользователь может предоставить нам разрешение, но все же заблокировать их адрес электронной почты? Или он может быть найден под другим ключом?

Спасибо.

4b9b3361

Ответ 1

Короткий ответ: не у всех пользователей есть доступный адрес электронной почты, а у тех, у кого это может быть, нет допустимого, доступного адреса электронной почты

Документация для поля email объекта user (https://developers.facebook.com/docs/reference/api/user/) поясняет ожидаемое поведение здесь: "это поле не будет возвращено, если действительный адрес электронной почты не доступен"

Существует ряд обстоятельств, при которых вы можете подумать, что у пользователя должен быть возвращен адрес электронной почты, но он не будет. Некоторые общие причины:

  • Нет адреса электронной почты в аккаунте
  • Нет подтвержденного, подтвержденного адреса электронной почты на счету
  • Пользователь ввел контрольную точку безопасности, которая потребовала от них подтверждения своего адреса электронной почты, и они еще не сделали этого.
  • Адрес электронной почты пользователей недоступен

Вам также потребуется расширенное разрешение email (которое пользователи могут не разрешать), даже для пользователей, у которых есть допустимый, подтвержденный доступный адрес электронной почты в файле.

Ответ 2

Форма регистрации на мобильный в http://touch.facebook.com/r.php позволяет вам регистрироваться с адресом электронной почты или номером телефона. Поэтому я не думаю, что у всех пользователей Facebook есть адрес электронной почты, хранящийся с ними.

Ответ 3

Пользователь может отменить разрешение адреса электронной почты на странице настроек конфиденциальности приложений без аннулирования полного приложения. Вы можете сначала вызвать /me/permissions, чтобы убедиться, что разрешение по электронной почте по-прежнему предоставляется.

Ответ 4

Если вы используете facebook SDK 2.4 или выше, вам нужно добавить "поля" в стратегию

Ниже приведен пример oAuth library.

FacebookStrategy.php line 131

ДО:

$me = $this->serverGet('https://graph.facebook.com/me', array('access_token' => $access_token), null, $headers);

ПОСЛЕ:

$me = $this->serverGet('https://graph.facebook.com/me', array('access_token' => $access_token,'fields'=>'email,name,first_name,last_name,age_range,gender'), null, $headers);

Независимо от списка полей, если вы хотите получить дополнительную информацию, которая по умолчанию не предоставляется Facebook, разрешения должны быть в массиве "scope".

Данные по умолчанию, предоставляемые SDK, включают: электронную почту, общедоступный профиль, user_friends

Ответ 5

Отсутствие поля электронной почты происходит, когда пользователь не подтверждает свой основной адрес, нажав ссылку из сообщения активации.

Ответ 6

Имел ту же проблему и обнаружил, что в редких случаях, когда это происходит, у пользователя не было указателя первичного E-Mail-адреса (хотя было зарегистрировано 2 Адреса). Мы не можем воспроизвести такое ценовое предложение, так как обычно невозможно получить основной адрес электронной почты.

Кто-нибудь может подтвердить что-то подобное?