Маркеры пользователя и маркеры доступа к Странице, предоставляемые по умолчанию, являются краткосрочными и действуют несколько часов. Однако такой маркер можно обменять на долгосрочный.
SDK для iOS, Android и JavaScript автоматически обновляют маркеры, если пользователь открывал приложение в течение последних 90 дней. Нативным мобильным приложениям, которые используют SDK от Facebook, предоставляются долгосрочные маркеры доступа пользователя, действующие около 60 дней. Эти маркеры обновляются один раз в день, когда пользователь приложения отправляет запрос на серверы Facebook. При отсутствии запросов срок действия маркера истечет приблизительно через 60 дней, и для получения нового маркера пользователю придется вновь выполнить вход.
Последняя версия API Graph: v21.0
Долгосрочный маркер доступа пользователя можно сгенерировать из краткосрочного. Долгосрочные маркеры обычно действуют около 60 дней.
Вам понадобится следующее:
Отправьте запрос к конечной точке GET oauth/access_token
.
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token? grant_type=fb_exchange_token& client_id={app-id}& client_secret={app-secret}& fb_exchange_token={your-access-token}"
{ "access_token":"{long-lived-user-access-token}", "token_type": "bearer", "expires_in": 5183944 //The number of seconds until the token expires }
Процесс получения долгосрочного маркера доступа пользователя выглядит так:
Полученный долгосрочный маркер можно применять на сервере или отправить его для дальнейшего использования клиенту.
Нельзя запрашивать долгосрочный маркер с использованием маркера, срок действия которого истек. Если срок действия маркера истек, ваше приложение должно предложить пользователю войти заново, чтобы повторно сгенерировать новый краткосрочный маркер доступа.
Вызов необходимо отправлять с сервера, а не из клиента. Этот вызов API содержит секрет приложения, поэтому запрос ни в коем случае не следует отправлять из клиента. Вместо этого реализуйте на сервере код создания запроса и передайте ответ, содержащий долгосрочный маркер, в код клиента. Эта строка будет отличаться от исходного маркера, поэтому, если вы сохраняете маркеры, замените старый.
Не используйте одни и те же долгосрочные маркеры для двух и более веб-клиентов (например, если человек входит в приложение с нескольких компьютеров). Вместо этого с помощью долгосрочных маркеров нужно сгенерировать на сервере код, который позволит получить долгосрочный маркер в клиенте. Далее будет описано, как создать долгосрочные маркеры из долгосрочных маркеров на сервере.
Долгосрочный маркер доступа к Странице можно сгенерировать из долгосрочного маркера доступа пользователя. Такие маркеры доступа к Странице имеют неограниченный срок действия. Срок действия истекает или маркер становится недействительным только при определенных условиях.
Вам понадобится:
Отправьте запрос к конечной точке GET {app-scoped-user-id}?accounts
.
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/{app-scoped-user-id}/accounts? access_token={long-lived-user-access-token}"
{ "data":[ { "access_token":"{long-lived-page-access-token}", "category":"Brand", "category_list":[ { "id":"1605186416478696", "name":"Brand" } ], "name":"Cute Kitten Page", "id":"{page-id}", "tasks":[ "ANALYZE", "ADVERTISE", "MODERATE", "CREATE_CONTENT", "MANAGE" ] } ], "paging":{ "cursors":{ "before":"MTM1MzI2OTg2NDcyODg3OQZDZD", "after":"MTM1MzI2OTg2NDcyODg3OQZDZD" } } }
Facebook позволяет получать для приложений долгосрочные маркеры доступа, которые помогают избежать активации механизма защиты от спама. Эта функция доступна для приложений, которые:
На высоком уровне долгосрочный маркер можно получить для клиента следующим образом:
Отправьте запрос к конечной точке GET oauth/client_code
. URI перенаправления должен совпадать с указанным на Панели приложений в карточке Вход через Facebook > Настройки > Клиентские настройки OAuth.
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/client_code? client_id={app-id}& client_secret={app-secret}& redirect_uri={app-redirect-uri}& access_token={long-lived-user-access-token}"
{ "code":"{code-for-your-client}" }
Код, полученный от сервера Facebook, необходимо передать клиенту по защищенному каналу. После этого нужно отправить запрос от клиента к конечной точке /oauth/access_token
:
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token? code={code-for-your-client}& client_id={app-id}& redirect_uri={app-redirect-uri}& machine_id= {your-client-machine-id}"
machine_id
— это необязательный параметр, который идентифицирует и отслеживает клиентов и применяется для обеспечения безопасности и предотвращения спама. Его значение индивидуально для каждого клиента, но не для каждого пользователя. Если вы уже отправляли вызовы для получения кода и вам был предоставлен machine_id
, укажите его в запросе кода.
{ "access_token":"{long-lived-access-token}", "expires_in":5183944, //The number of seconds until the token expires "machine_id":"{your-client-machine-id}" }
Процесс получения долгосрочного маркера выглядит так: