Facebook Callback JSON не возвращает почту иногда
Facebook Graph API.
Я запрашиваю разрешение электронной почты, и он отлично работает, за исключением некоторых пользователей, json не возвращает поле электронной почты. Я не знаю, почему это происходит. Код тот же, и он отлично работает для всех пользователей, возвращает поле электронной почты, кроме 1 из 100 или около того, где у него нет этого поля в json. Все остальные поля есть.
Кто-нибудь сталкивался с этой проблемой раньше?
Я проверил настройки конфиденциальности facebook, и нет ничего, что помешало бы приходу электронной почты в json, если пользователь предоставит доступ к электронной почте для приложения facebook, но это происходит со мной. Я искал сеть, и никто другой, похоже, не сталкивался с этой проблемой.
Любой намек будет оценен
Ответы
Ответ 1
Никогда не делайте предположений о том, что Facebook отправит вам, никогда не ожидайте присутствия каждого поля и никогда не ожидайте, что запрос Graph сделает то, что вы хотите.
Facebook иногда делает что-то вроде этого, недостающее поле здесь и там, загадочную и неожиданную ошибку где-то в другом месте... Хотя не может быть и вреда, что это также происходит в таких критических местах, как в signed_request, отправленных, когда пользователь запускает приложение.
Вы также должны знать, что "ваш" Facebook может быть не всем остальным Facebook. Они выполняют географическое и несколько случайное развертывание своего кода. Возможность скрыть свой адрес электронной почты для каждого приложения может появиться для кого-то, но не для кого-то другого, без каких-либо особых причин.
Учитывая вашу конкретную проблему, я сомневаюсь, что есть возможность скрыть ваш адрес электронной почты к приложению, у которого есть разрешение на почту, но если разрешение не является обязательным, кто-то может принять ваше приложение и дополнительные настройки вишни.
Ответ 2
Я недавно занимался этой проблемой. По-видимому, facebook только обещал вернуть адрес "действительного адреса электронной почты". На какой-либо учетной записи нет "действительного письма". Они могут быть учетными лицами, использующими телефон для проверки, или учетной записью, по которой истек срок действия электронной почты. Я попробовал с учетной записью, которая по электронной почте, позволяет сказать, что "xxxx.gmail.com" истек, когда запрос на этот график счетов, я не могу получить никаких сообщений по электронной почте (используя отладчик facebook). Однако, когда я вхожу в xxxx.gmail.com в gmail и повторно активирую электронную почту, и я снова запрашиваю график api для учетной записи, он может вернуть мне электронную почту.
Ответ 3
имел ту же проблему на некоторое время, из-за чего тяжелая голова ударялась о стену.
в моем случае проблема возникла из-за того, что у некоторых пользователей непроверенные электронные письма или нет электронной почты вообще (при регистрации через мобильный /SMS ).
в этом случае facebook не будет предоставлять электронное письмо в ответ.
из facebook docs:
note: это поле не будет возвращено, если недействительный адрес электронной почты доступный для пользователя
Источники:
Ответ 4
Единственное, что сработало для меня, - это запрашивать разрешенные поля через API:
FB.api("/me", {fields: "email,..."}, callback)
Это полностью устраняло проблему.
Надеюсь, что это поможет.