Как вы обрабатываете обновления в реальном времени? - PullRequest
2 голосов
/ 10 ноября 2011

Я работаю над сайтом, который пытается обрабатывать обновления каналов в реальном времени из учетных записей своих пользователей в Facebook.У меня есть основные вещи на месте: приложение подписано на «feed», а логин пользователя запрашивает разрешения read_stream и offline_access (на всякий случай).Мои тестовые пользователи вошли в FB и получили эти разрешения, и, когда один из этих пользователей добавляет (или удаляет) обновление статуса, обратный вызов, указанный в подписке моего сайта, проверяется.Пока все хорошо.

Теперь, насколько я понимаю, мой обратный вызов должен позвонить в Facebook, чтобы получить фид пользователя, чтобы обратный вызов мог делать с ним все, что он собирается.Вот где у меня проблемы - найти правильный токен доступа для получения канала:

  • Я пытался сделать это с токеном доступа приложения.Этот токен может извлекать информацию о друзьях (также включенную в подписку и разрешения пользователей приложения), но не дает мне фид.

  • Я пробовал все виды способовполучить токен доступа пользователя из-за обратного вызова, но ничего не работает.Я предполагаю, что это потому, что это не "вход в Facebook", каким может быть пользователь в браузере, но что угодно.Суть в том, что я не нашел способ получить этот токен.

(Кстати, если я обманываю - получите токен доступа для пользователя из Graph API Explorer и жесткого кодаэто в обратный вызов, обратный вызов работает должным образом. Это, конечно, не реальное решение, но, по крайней мере, устанавливает, что остальная часть моего кода работает.)

Так как это работает?Можно ли заставить маркер доступа к приложению работать как-нибудь?Существует ли способ обратного вызова для получения токена доступа для произвольного авторизованного пользователя?Должен быть способ сделать это, иначе не будет смысла для уведомлений в реальном времени.Есть какие-нибудь подсказки?Это серьезно пинает меня в задницу ... Спасибо!

Ответы [ 4 ]

2 голосов
/ 02 декабря 2012

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

https://developers.facebook.com/roadmap/offline-access-removal/

1 голос
/ 21 декабря 2011

Запросите offline_access (как вы) и сохраните токен доступа. Именно поэтому существуют offline_access и токены доступа для отправки запросов на facebook от имени этого пользователя. (а) это правильный путь. (а) это способ, которым я делаю это. Удачи

1 голос
/ 11 ноября 2011

Я нашел решение, возможно: когда пользователь входит в систему, я зацепляю его токен доступа с поддержкой offline_access и сохраняю его в приложении вместе с остальными данными пользователя. Затем, когда я получаю уведомление об обновлении фида этого пользователя, я могу извлечь токен из базы данных и передать его FB как часть токена вызова / feed .... И это работает. Нет никаких сомнений в том, что нужно сделать какую-то обработку ошибок, но в настоящее время я прыгаю назад и вперед, думая, что (а) это абсолютно правильный способ справиться с этим и (б) это ужасный взлом, который просто вызывает проблемы. Я думаю, я посмотрю, какой из этих случаев ...

0 голосов
/ 02 июня 2013

Когда пользователь проходит аутентификацию через OAuth, Facebook возвращает токен доступа, но он действителен в течение нескольких часов.Срок действия этого токена приходит с ним как срок действия токена.Однако этот токен можно заменить новым расширенным токеном, который действителен в течение 60 дней.Для получения нового токена используйте следующий код:

URL-адрес URL = новый URL-адрес ("https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id="+appId+"&client_secret="+clientSecretId+"&fb_exchange_token="+fb_exchange_token;

InputStream Istream = url.openConnection (). GetInputStream ();

BufferedReader br = новый BufferedReader (новый InputStreamReader (Istream));

String new_token = br.readLine ();

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...