如Facebook Oauth Documentation所述,为了将客户端流程与桌面应用程序一起使用,需要特殊的return_uri https://www.facebook.com/connect/login_success.html
。
从Chrome打开新标签页面
https://www.facebook.com/dialog/oauth?client_id=MYAPPID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token
按预期工作,我被重定向到login_success页面,其中包含令牌的access_token
参数。我可以使用简单的GET请求(例如,使用jQuery)从Graph API请求数据:
$.getJSON("https://graph.facebook.com/me", {access_token : token}, function (d)
{
.. process returned data
});
我的问题是,我是否可以使用SDK的内部授权方法继续使用Javascript SDK 而不是。
FB.getLoginStatus
返回错误,表明我的Connect / Canvas URI不正确。如果没有这种方法,我应该如何检查令牌状态[除了手动GET和响应匹配]?
FB.login
显然因以下错误而失败:
API错误代码:191
API错误说明:指定的URL不属于应用程序
错误消息:redirect_uri无效
(url与应用程序配置中的域url不匹配),因为似乎无法在内部指定上面的return_uri。
在外部访问令牌时,有没有办法依赖Javascript SDK(尤其是事件)?我应该覆盖访问令牌吗?
答案 0 :(得分:1)
是的,您可以将它用于正常事件(即有人点击了类似按钮),如下所示:
<div id="fb-root"></div>
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js#xfbml=1" id="facebook-jssdk"></script>
<script type="text/javascript">
FB.Event.subscribe('edge.create',
function(response) {
console.log(response);
}
);
</script>
不幸的是,对于常规API调用,您无法在扩展中使用Facebook JS SDK。你必须为此推出自己的API包装器。
查看访问令牌是否有效的简单方法是使用您保存的访问令牌对/ me?fields = id进行图形API调用。这将很快,您可以使用响应来查看访问令牌是否仍然有效。扩展程序的最佳做法是请求权限offline_access
。
另外,我建议将重定向URI放在您拥有的域上。这样,如果其他扩展程序正在执行相同操作,则脚本不会干扰。访问令牌将是相同的。