8

主要目标:如何获得对 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

    废弃令牌示例:328467452729456598|Wn2Gt69Ofg5ySdOGa3TsP2p4R

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

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

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

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

尝试使用从 Graph Explorer API 令牌中检索到的令牌

如果我使用通过 Graph API Explorer (https://developers.facebook.com/tools/explorer) 获得的 APP_ACCESS_TOKEN,我会得到一个带有明显更长的用户部分的令牌。如果我在第 2 步和第 3 步中使用此令牌,我将获得正确的数据,但所有令牌仅在 2 小时内有效,随后我无法将其用于自动检索洞察数据。

尝试将短期令牌换成长期令牌

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

如果我尝试交换从 oauth 进程获得的令牌,则会收到错误消息:

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

如果我在交换方法中使用从 Graph explorer 手动获取的令牌,我可以让其他步骤也能正常工作,但是这个新令牌能持续多久?如果令牌在 x 天后或其他一些事件之后过期,我仍然会面临以编程方式获取初始令牌的问题(而不是从 Graph Explorer 手动获取)。

那么有谁知道我怎样才能获得一个长期有效的、自动检索的令牌来解决这个问题?

谢谢!

4

2 回答 2

2

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

https://github.com/dncohen/fb_token

于 2012-12-20T20:14:47.797 回答
-1

在第 2 步中,您必须使用用户的access_token来访问/accountsAPI 端点。您不能在此处使用应用访问令牌。

你应该做的是:

  1. 从 Facebook 获取用户的访问令牌
  2. 将 access_token 交换为长期存在的令牌
  3. 调用/accounts以获取长期页面访问令牌
  4. 使用长期令牌访问页面洞察力,直到它过期
  5. 重复步骤 1-4。
于 2012-08-28T15:46:23.227 回答