как вы обрабатываете обновления ленты в реальном времени?

#facebook #facebook-graph-api #real-time

#Facebook #facebook-graph-api #в режиме реального времени

Вопрос:

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

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

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

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

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

Итак, как это работает? Можно ли как-то заставить токен доступа к приложению работать? Существует ли на самом деле способ обратного вызова для получения токена доступа для произвольного авторизованного пользователя? Должен быть способ сделать это, иначе не было бы смысла в уведомлениях ленты в реальном времени. Есть какие-нибудь подсказки? Это СЕРЬЕЗНО надирает мне задницу… Спасибо!

Ответ №1:

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

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

Ответ №2:

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

Комментарии:

1. Да, если у вас есть access_token, я думаю, что обычно срок его действия истекает через 1-2 часа. Вам нужен offline_access, если вам нужно использовать этот токен дольше.

Ответ №3:

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

Ответ №4:

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

URL url=новый URL («https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_tokenamp;client_id =» AppID «amp;client_secret=» clientSecretId «amp;fb_exchange_token =» fb_exchange_token;

Входной поток Istream=url.openConnection().getInputStream();

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

Строка new_token= br.readLine();

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