Facebook JavaScript SDK突发失效,调用FB.api('/me')报错求助
解决Facebook JavaScript SDK调用FB.api('/me')报错的问题
首先,我看到你已经成功通过FB.login拿到了connected状态和authResponse,说明登录授权这一步是没问题的,问题大概率出在FB.api('/me')的调用上。结合你提供的错误请求URL,我整理了几个常见的解决方向:
1. 显式指定需要获取的字段(最可能的原因)
从Graph API v2.4版本开始,Facebook不再默认返回用户的所有公开字段,必须显式声明你需要获取的字段。你当前的FB.api('/me')没有指定任何字段,这在v2.7版本里可能会触发API报错。
修改你的API调用代码,比如如果你需要获取用户ID、姓名,可以改成这样:
FB.api('/me', { fields: 'id,name' }, function(response){ console.log(response); });
2. 检查应用的模式与测试用户设置
如果你的Facebook应用还处于开发模式,只有添加到「测试用户」列表里的账号才能正常调用Graph API。你可以登录Facebook开发者后台,确认当前登录的用户是否在测试用户列表中,或者暂时将应用切换到上线模式(注意上线前要完成应用审核)。
3. 验证Access Token的有效性
虽然FB.login返回了authResponse,但还是可以手动验证一下token是否有效:直接把错误URL里的完整链接复制到浏览器地址栏,查看返回的具体错误信息(比如是否提示权限不足、token过期等),根据错误提示再针对性调整。
4. 确保SDK加载的正确性
确认你的SDK加载代码是标准的异步加载格式,所有FB相关的操作都放在window.fbAsyncInit回调里,避免因SDK未完全加载导致的异常。标准的加载模板大概是这样:
window.fbAsyncInit = function() { FB.init({ appId : facebook.appId, cookie : true, xfbml : true, version : 'v2.7' }); // 这里放FB.login和FB.api的代码 FB.login(function(response){ console.log(response); if(response.authResponse){ FB.api('/me', { fields: 'id,name' }, function(response){ console.log(response); }); } },{scope:'public_profile'}); }; // 加载SDK的脚本 (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "https://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

