Длительный токен доступа FB для сервера, чтобы получить информацию о странице FB

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

  • Я создаю сайт, который на стороне сервера должен извлекать сообщения / статусы с одной страницы Facebook.
  • Я администратор этой страницы Facebook
  • Я создал приложение для Facebook
  • Используя Facebook Graph API Explorer, я создал недолговечный ключ, связанный с моим приложением и моей учетной записью, который дает разрешение моей учетной записи для просмотра токенов доступа для моих страниц.
  • Я конвертировал свой недолговечный ключ в сценарий 4 с долгоживущим ключом (60 дней) из этого

И вот где я застрял. Мой 60-дневный ключ отлично работает для моего сервера, чтобы получить информацию, необходимую со страницы, но, насколько я могу судить, нет никакого способа программно расширить этот 60-дневный ключ. Я также не знаю, как сгенерировать новый недолговечный ключ, не заходя вручную в Facebook Graph API Explorer и не создавая его.

Поскольку мой сервер выполняет запросы к API Facebook, а не к пользовательской системе (где я мог бы легко попросить пользователя снова авторизовать приложение Facebook), это создает очень неуклюжую систему. С тех пор как Facebook устарел offline_accessдействительно ли нет никакого постоянного способа получить информацию о моем сервере с моей собственной страницы? Нужно ли мне создавать новый ключ вручную и обновлять его вручную каждые 60 дней?

Или мне чего-то не хватает?

Обновить:

Пошаговое руководство, ранее найденное здесь, перенесено в собственный ответ.

4 ответа

Решение

Это шаги, которые были ранее в вопросе - они были перенесены в этот ответ.

Обнаружив, что можно сгенерировать токен доступа к странице Facebook, срок действия которого не истекает (с помощью @Igy), вот четкое пошаговое руководство для всех, кто ищет то же самое:

  1. Убедитесь, что вы являетесь администратором страницы FB, с которой хотите получить информацию
  2. Создать приложение FB (должно быть с той же учетной записью пользователя, что и администратор страницы)
  3. Перейдите в Facebook Graph API Explorer
  4. В правом верхнем углу выберите приложение FB, которое вы создали, из раскрывающегося списка "Приложение".
  5. Нажмите "Получить токен доступа"
  6. Убедитесь, что вы добавили manage_pages разрешение
  7. Преобразуйте этот недолговечный токен доступа в долгоживущий, выполнив этот вызов API API:https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  8. Возьмите новый долгоживущий токен доступа, возвращенный обратно
  9. Выполните вызов API Graph для просмотра ваших учетных записей с использованием нового маркера долговременного доступа: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Хватай access_token для страницы вы будете получать информацию с
  11. Lint токен, чтобы увидеть, что он установлен в Expires: Never!

Это должно сделать это. Теперь у вас должен быть токен доступа к странице Facebook, срок действия которого не истекает, если только:

  • Вы меняете пароль своей учетной записи Facebook
  • Вы теряете доступ администратора для целевой страницы
  • Вы удаляете или деавторизируете свое приложение Facebook

Любой из них приведет к тому, что токен доступа станет недействительным.

Если вы получаете (#100) Tried accessing nonexisting field (accounts) on node type (Page), зайдите в Access Token Debugger, скопируйте значение User IDи используйте его для замены части URL "я" в шаге 9.

Это описано в документе об устаревании автономного доступа.

Используйте 60-дневный токен для администратора страницы, чтобы получить токен доступа к странице (через /PAGE_ID?fields=access_token или же /me/accounts) - токен доступа к странице не будет иметь срока действия

Подход, который работает в 2019 году

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

Мой вариант использования

Итак, как я уже сказал, мой вариант использования очень похож на описанный здесь; то есть:

  • Я работаю в школьном округе.
  • Они используют программный инструмент для управления практически всем, что касается школьного транспорта.
  • Этот инструмент позволяет им отправлять электронные уведомления (подписчикам), когда они публикуют оповещения о задержках автобусов и закрытии школ.
  • Многие люди в сообществе следят за организацией на своей странице в Facebook, и это единственное место, где они ищут эти предупреждения.
  • Таким образом, сотрудник организации должен вручную публиковать каждое уведомление на странице Facebook (помимо создания в транспортном ПО). Более того, эти уведомления в конечном итоге истекают (или просто удаляются до истечения срока их действия), поэтому сотрудник должен вернуться позже, чтобы удалить их вручную.
  • Это небольшая часть времени, поэтому мы пытаемся разработать простую систему, которая периодически опрашивает базу данных программного инструмента на предмет новых (и просроченных) уведомлений и обновляет их (то есть добавляет и удаляет) на странице Facebook.

На мой взгляд, это законный вариант использования, но я не знал, как реализовать его в соответствии с политиками Facebook.

Принятый ответ

Я выполнил шаги принятого ответа, и он сработал, за исключением того, что, похоже, все изменилось: теперь, даже если сгенерированный токен страницы не истекает, access to dataдействительно истекает примерно через 60 дней. Вы также увидите это, если выполните процедуру и проверите токен страницы в FB Token Debugger Tool.

Кроме того, тот факт, что сгенерированные токены страницы привязаны к учетной записи пользователя, также прискорбен, потому что, если пользователь обновляет свой пароль, токен страницы также становится недействительным.

Как это сделать в 2019 году

После нескольких часов исследования я наткнулся на следующую статью документации Facebook: Business Login for Direct Business.

Оказывается, теперь можно, следуя шагам, описанным в приведенной выше статье, сгенерировать токен страницы, который не связан с какой-либо конкретной учетной записью пользователя Facebook и срок действия которого не истечет (если только приложение FB не будет удалено или базовый токен приложения удаляется, понимаете...)

Итак, вот шаги и самые важные части:

  • Вам нужен аккаунт Бизнес-менеджера.
    • Требуется проверка и подписание цифрового контракта.
  • Вам необходимо добавить целевую страницу Facebook в эту учетную запись.
  • Вам необходимо создать приложение Facebook и перенести это приложение в ту же учетную запись Business Manager.
  • Приложение должно будет пройти процесс проверки Facebook, потому что потребуются следующие разрешения: manage_pages а также publish_pages.
    • Важное примечание Для того, чтобы сообщения, сделанные с использованием токена создания страницы, были видны пользователям, кроме администраторов приложения, это приложение должно быть опубликовано и одобрено.
    • Вы по-прежнему можете экспериментировать с концепцией, не отправляя на рассмотрение, но сообщения не будут общедоступными.
  • В учетной записи Business Manager (только после того, как ваше приложение и страница были добавлены в учетную запись), вам необходимо создать так называемого системного пользователя и предоставить этому пользователю роль администратора (или разрешения) для целевой страницы Facebook.
    • Системный пользователь принадлежит учетной записи Business Manager и не привязан к конкретному пользователю. На данный момент я понимаю, что одним из основных вариантов использования для системного пользователя является программный доступ к Facebook Graph API (именно то, что нам нужно).
  • Затем для этого пользователя системы вам необходимо сгенерировать токен доступа (срок действия которого не истекает). Вам будет предложено выбрать, для какого приложения. Затем вы выберете свое целевое приложение.
  • Затем вам нужно будет использовать сгенерированный токен приложения для создания токена страницы, который также будет бессрочным. Процедура описана в этой статье как:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Вот и все.

Срок действия этого токена никогда не истечет, и он не будет привязан к конкретному пользователю Facebook, так что это именно то, что нам нужно!

Последняя часть - убедиться, что ваше приложение Facebook одобрено Facebook. Фактически, это самая важная часть, потому что вся процедура бесполезна, если люди не видят наши сообщения.

Я хотел знать наверняка, что могу положиться на описанную выше процедуру, чтобы создать что-то для моего клиента без того, чтобы Facebook отклонил это в конце, поэтому заранее (то есть перед тем, как начать работу над проектом моего клиента), я прошел весь процесс создание страницы, приложения, учетной записи Business Manager и т. д. Я подтвердил свой бизнес. Я отправил свое приложение на проверку. В моем запросе я очень конкретизировал свой вариант использования и подчеркнул, что приложение предназначено для "самостоятельного использования" (т. Е. Что организация разрабатывает приложение для себя, а не для других пользователей Facebook). Я получил одобрение менее чем за 24 часа.

Еще несколько примечаний о процессе проверки приложения:

  • Мне нужно было выбрать платформу для приложения, поэтому я выбрал веб-сайт.
  • Я должен был указать, зачем приложению нужны эти два разрешения и как оно будет их использовать.
  • Я должен был указать, почему рецензент не сможет войти в мое приложение и попробовать его (то есть потому, что приложение будет использоваться рабочим процессом).
  • Для обязательных скринкастов я просто представил ручные операции в терминале с помощью curlутилита (для генерации токена страницы и публикации сообщений на странице Facebook). Я также показал, как я использовал Бизнес-менеджер, чтобы связать пользователя системы со страницей и сгенерировать токен и так далее.
  • Опять же, я очень конкретизировал свой вариант использования, и я думаю, что это помогло.

Надеюсь, эта информация будет полезна людям с похожими вариантами использования.

Большое спасибо @redhotvengeance за пошаговое руководство.

Через некоторое время теперь в фейсбуке четко описано:

https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension

Расширение токенов доступа к странице

Приложения могут получить токен доступа к странице от пользователей администратора страницы, когда они проходят аутентификацию с разрешением manage_pages. Если токен доступа пользователя, используемый для получения этого токена доступа к странице, является недолговечным, токен доступа к странице также будет недолговечным.

Чтобы получить токен доступа к странице с более долгим сроком службы, замените токен доступа пользователя на долгоживущий, как указано выше, а затем запросите токен доступа к странице. Полученный токен доступа к странице не будет иметь никакого срока действия.

Вы также можете скопировать и вставить из панели приложения на Facebook. Шаги:

  1. Перейти на https://developers.facebook.com/

  2. Выберите свое приложение в правом верхнем углу страницы (рис. Как это выглядит)

  3. Нажмите на Messenger из опций слева (он перейдет к настройке автоматически) (изображение того, как это выглядит)
  4. Перейдите в раздел "Создание токенов" на странице. Выберите, для какой страницы вы хотите сгенерировать токен. (изображение того, как выглядит этот раздел)
  5. Скопируйте и пройдите маркер вашей страницы, где бы он вам ни понадобился.

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

Другие вопросы по тегам