Длительный токен доступа 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), вот четкое пошаговое руководство для всех, кто ищет то же самое:
- Убедитесь, что вы являетесь администратором страницы FB, с которой хотите получить информацию
- Создать приложение FB (должно быть с той же учетной записью пользователя, что и администратор страницы)
- Перейдите в Facebook Graph API Explorer
- В правом верхнем углу выберите приложение FB, которое вы создали, из раскрывающегося списка "Приложение".
- Нажмите "Получить токен доступа"
- Убедитесь, что вы добавили
manage_pages
разрешение - Преобразуйте этот недолговечный токен доступа в долгоживущий, выполнив этот вызов 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>
- Возьмите новый долгоживущий токен доступа, возвращенный обратно
- Выполните вызов API Graph для просмотра ваших учетных записей с использованием нового маркера долговременного доступа:
https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
- Хватай
access_token
для страницы вы будете получать информацию с - 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. Шаги:
Перейти на https://developers.facebook.com/
Выберите свое приложение в правом верхнем углу страницы (рис. Как это выглядит)
- Нажмите на Messenger из опций слева (он перейдет к настройке автоматически) (изображение того, как это выглядит)
- Перейдите в раздел "Создание токенов" на странице. Выберите, для какой страницы вы хотите сгенерировать токен. (изображение того, как выглядит этот раздел)
- Скопируйте и пройдите маркер вашей страницы, где бы он вам ни понадобился.
Имейте в виду, что, хотя теоретически ваш токен не истекает, он напрямую связан с той учетной записью Facebook, в которую вы вошли. Допустим, вы изменили свой пароль или удалили разрешения между своей учетной записью и приложением, тогда ваш токен больше не будет действительным.