如何获得持久的Facebook Access令牌?

时间:2012-08-28 15:03:57

标签: facebook-graph-api

主要目标:如何获取Facebook应用无效的访问令牌?

背景资料

我们有一个名为MyApp的FB应用程序,其设置如下:

  • MyApp有权与我们的Facebook应用程序进行互动
  • MyApp拥有管理我们网页的权限(manage_pages)
  • MyApp可以访问Insights(read_insights)

我们的目标是自动提取数据洞察数据,例如每晚一次。

尝试使用oauth生成的应用令牌

  1. 获取属于MyAPP的APP_ACCESS_TOKEN

    graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials

    示例retireved令牌:328467452729456598 | Wn2Gt69Ofg5ySdOGa3TsP2p4R

  2. 使用APP_ACCESS_TOKEN为每个页面获取PAGE_ACCESS_TOKEN graph.facebook.com/me/accounts?access_token=APP_ACCESS_TOKEN

  3. 使用PAGE_ACCESS_TOKEN获取网页的数据洞察数据: graph.facebook.com/YOUR_APP_ID/insights?access_token=PAGE_ACCESS_TOKEN

  4. 我的问题是我从第1步获得的APP_ACCESS_TOKEN似乎缺少令牌的用户部分,导致在运行第2步时出现以下错误:

     "message": "An active access token must be used to query information about the current user.",
     "type": "OAuthException",
     "code": 2500
    

    尝试从图形浏览器API令牌中检索到令牌

    如果我使用APP_ACCESS_TOKEN通过图形API资源管理器(https://developers.facebook.com/tools/explorer)获得,我得到与作为显著较长的用户部分的令牌。 如果我在步骤2和3中使用此令牌,我会获得正确的数据,但所有令牌仅在2小时内有效,之后我无法使用它来自动检索洞察数据。

    尝试为长期存在的令牌交换短期令牌

    按照本指南中列出的步骤:https://developers.facebook.com/roadmap/offline-access-removal/#page_access_token,我尝试将一个短期令牌换成更长寿的令牌。

    如果我使用try来交换从oauth进程获得的令牌,我会收到错误:

      "message": "No user access token specified",
      "type": "OAuthException",
      "code": 1
    

    如果我在交换方法中使用从Graph explorer手动获得的令牌,我可以让其他步骤也可以工作,但这个新令牌会持续多长时间?如果令牌在x天之后或其他事件之后到期,我仍然会面临以编程方式获取初始令牌的问题(而不是手动从图表浏览器中手动获取)。

    所以有人知道如何获得一个长期的,自动检索的令牌来解决这个问题吗?

    谢谢!

2 个答案:

答案 0 :(得分:2)

此shell脚本尝试帮助生成访问令牌:

https://github.com/dncohen/fb_token

答案 1 :(得分:-1)

在第2步中,您必须使用用户的access_token来访问/accounts API端点。您无法在此处使用App Access令牌。

你应该做的是:

  1. 从Facebook获取用户的访问令牌
  2. 将access_token换成长期存在的令牌
  3. 致电/accounts以获取长期网页访问令牌
  4. 使用长期令牌访问页面洞察,直到它过期
  5. 重复步骤1-4。