默认的用户和主页访问口令为短期口令,会在数小时后过期,但您可以使用短期口令交换长期口令。
在您使用 iOS、Android 或 JavaScript SDK 时,如果用户在最近 90 天使用过您的应用,SDK 会自动刷新口令。使用 Facebook SDK 的原生移动应用会获得有效期为 60 天左右的长期用户访问口令。当应用用户向 Facebook 服务器发出请求时,系统会每天刷新一次这些口令。如果未发出任何请求,口令就会在大约 60 天后过期,且用户必须再次登录才能获得新口令。
图谱 API 最新版本: 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 可提供为某些应用获取长期访问口令的选项,从而避免触发 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}" }
生成长期口令的工作流程如下所示: