我在php有一个音乐网站。我可以让用户通过facebook进行身份验证,并通过hybridauth库登录我的网站。
现在我想要的是每次用户收听歌曲时我都会用歌曲链接更新他的状态。 既然Facebook正在取消对离线访问的支持,或者这是不需要离线访问权限的事情,那么这可以实现吗?
我是facebook api的新手。
答案 0 :(得分:1)
好吧,我不完全了解你的情况,但是如果用户在你想要在他的墙上发布时使用你的应用程序那么你就没有问题,并且你不需要“offline_access”或任何等价物。
您只需将javascript SDK加载到该页面,这将确保用户已通过身份验证,并且您拥有有效的访问令牌,如授权文档Handling Invalid and Expired Access Tokens中所述:
使用Javascript SDK实现身份验证的桌面Web和移动Web应用
调用FB.getLoginStatus()或确保status:true 调用FB.init()表示下次用户登陆您的 应用程序并签署到Facebook,authResponse对象你 由于那些调用将包含一个新的,有效的传递 访问令牌。
在这种情况下,它只是用户使用您的应用程序的行为 它隐式生成一个新的访问令牌。
如果您使用服务器端身份验证流程,或者使用为扩展有效访问令牌(使用客户端流程获得)提供的新端点facebook,您可以获得一个相当长的访问令牌(大约60天)在帖子Removal of offline_access Permission中描述。
如果这对您有所帮助,那么我建议您确保您的应用程序可以处理令牌过期,因为您无法完全避免这种情况。
如何?好吧,你有几个选择,你需要找到一个适合你特定场景的选项,但这里有一个选项: 首先,正如我所看到的,你将不得不在客户端做事,因为当用户正在收听歌曲时令牌ca到期,并且为了从服务器端获得新令牌,你将拥有刷新页面并将用户发送到auth对话框,这将干扰他的体验。
这里有一些使用js sdk的js代码,它不是完整代码,我不希望它能够工作,但它应该让你知道你可以做什么:
FB.Event.subscribe("auth.statusChange", function(response) {
if (response.status !== "connected") {
FB.login(function(response2) {
if (response2.authResponse) {
// you now have a valid access token, you can update your server side with an ajax request for example
}
else {
// user canceled login
}
});
}
});
此外,请注意 FB.login 尝试打开弹出窗口,所以不应该像这样调用它,只有在用户交互之后,所以不应该只是调用它,而应该替换它它向用户显示一条消息,例如“请点击'确定'以便能够发布到Facebook ...”并点击该按钮打开 FB.login 。
当然,您可以使用其他方法,或者您可以订阅的其他活动,只需阅读文档并试验您拥有的选项。