长期访问口令

默认的用户和主页访问口令为短期口令,会在数小时后过期,但您可以使用短期口令交换长期口令。

在您使用 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 的垃圾信息自动检测系统。可获取长期访问口令的应用需满足以下条件:

  • 有专属的身份验证系统(例如使用帐号/密码)
  • 会在自己的服务器上为应用用户保存 Facebook 访问口令,以便用户使用不同客户端(浏览器或原生移动应用)
  • 可从所有上述客户端调用 API

总体而言,您可按以下步骤,使用有效的长期访问口令获取适用于客户端的长期口令:

  1. 您的服务器发送请求,以从 Facebook 获取代码。
  2. Facebook 将代码发送回服务器,然后您将此代码安全发送至客户端。
  3. 客户端使用此代码向 Facebook 申请长期口令。
  4. 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}"
}

生成长期口令的工作流程如下所示: