Facebook API - Web应用程序的访问令牌

时间:2014-06-18 14:20:08

标签: javascript facebook facebook-graph-api facebook-javascript-sdk

我正在制作一个网络应用程序,从我们的Facebook页面中提取最新帖子并处理它们。 通过从this页面生成的硬编码访问令牌,这一切都正常。

问题是这个令牌过期了,所以我正在寻找一个解决方案,每次页面加载时生成一个新令牌或一个非过期令牌 - (我已经读过某个地方不再存在非过期令牌)

当然,我做了一些研究,hereherehere

但是这些例子似乎没有起作用。

在对我到目前为止尝试过的某些代码的任何投诉之前,这是我的工作示例 - 使用即将到期的访问令牌:

var Facebook = function () {
    this.token = 'MYTOKEN';
    this.lastPost = parseInt((new Date().getTime()) / 1000);
    this.posts = [];
};

Facebook.prototype.GetPosts = function () {
    var self = this;
    var deffered = $q.defer();
    var url =  'https://graph.facebook.com/fql?q=SELECT created_time, message, attachment FROM stream WHERE created_time < ' + self.lastPost + ' AND source_id = 437526302958567 ORDER BY created_time desc LIMIT 5&?access_token=' + this.token + '';
    $http.get(url)
        .success(function (response) {
            angular.forEach(response.data, function (post) {
                self.posts.push(new Post(post.message, post.attachment.media, post.attachment.media[0].src, post.created_time, 'facebook'));
            });
            self.lastPost = response.data[response.data.length -1].created_time;
            deffered.resolve(self.posts);
            self.posts = [];
        });
    return deffered.promise;
};
return Facebook;

非常感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:1)

首先,重要的是要记住Facebook刚刚推出了Graph API的第2版。从2014年4月开始,如果您的应用程序出现问题,您需要告诉我们您何时在Facebook开发人员上创建它(新应用程序默认使用版本2)。

为了管理网页,您的应用需要获得manage_pages权限。确保要管理粉丝页面的用户已授权您。如果您的应用使用版本2,请确保Facebook(Facebook员工)已授权您向用户询问此类权限,否则您的应用将无效。

获得令牌后,将其换成永久令牌(或具有较长到期日期的令牌)。确保使用粉丝页面的令牌,而不是用户的令牌。

如果您想读取公共粉丝页面流,则需要具有read_stream权限的访问令牌。此权限需要得到Facebook的批准(见上文),如果您使用的是图谱API的第2版,则此特定类型的权限需要时间来批准。如果您使用旧的API(版本1),您仍然可以在Facebook未经预先批准的情况下执行此操作。 要求读取流权限的URL如下:https://www.facebook.com/dialog/oauth?client_id=$YOUR_APP_ID&redirect_uri=$YOUR_URL&scope=read_stream,manage_pages(在这种情况下我添加了manage_pages,您可能不需要它)。 该网址将提示授权。用户授权应用后,您将被转到所选的网址,并使用code=变量。 此时,请调用另一个URL:

 https://graph.facebook.com/oauth/access_token?client_id={$app_id}&redirect_uri=$someurl&client_secret={$app_secret}&code={$code}

您将收到包含access_token=变量的回复。使用以下URL抓取该访问令牌,将其换成长令牌:

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={$app_id}&client_secret={$app_secret}&fb_exchange_token={$token_you_have_just_grabbed}

响应将为您提供持续一段时间的令牌。此前,Facebook已决定让这些“持续时间长的代币”在一个月后到期。但我发现他们可能已经改变了主意:如果你在调试器中放置一个用户令牌,你会发现它永远不会过期。 这是使用浏览器访问的用户的授权流程。还有应用程序授权流程。如果您只需要来自自己的粉丝页面的流,则需要执行以下操作(使用Graph API V.1):

  • 使用以下网址发出HTTP GET请求: https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={$app_id}&client_secret={$app_secret}

  • 使用生成的令牌进行另一次HTTP GET调用,如下所示: https://graph.facebook.com/{$your_page_id}/feed?{$authToken}&limit=10 //ten posts

  • 解码json对象

你已经完成了。