我有一个用php写的音乐网站。我可以让用户通过facebook进行身份验证,并通过杂交库登录到我的网站。
现在我想要的是,每次用户听一首歌时,我都会用歌曲链接更新他的状态。现在Facebook正在移除对离线访问的支持,这能实现吗?或者这是不需要离线访问权限的东西?
我是facebook api的新手。
发布于 2012-04-15 19:50:10
好吧,我不完全理解你的场景,但是如果用户在你想要发布到他的墙上的时候正在使用你的应用程序,那么你没有任何问题,而且你不需要"offline_access“或任何类似的东西。
您可以简单地将javascript SDK加载到页面,这将确保用户已通过身份验证,并且您拥有有效的访问令牌,如身份验证文档Handling Invalid and Expired Access Tokens中所述:
使用Javascript SDK实现身份验证的
桌面Web和移动Web应用程序
调用FB.getLoginStatus()或确保在调用FB.init()时设置了status: true,这意味着下次用户登录到应用程序并登录到Facebook时,作为这些调用的结果传递给您的authResponse对象将包含一个新的、有效的访问令牌。
在这种情况下,这只是用户使用您的应用程序的行为,隐式地生成了一个新的访问令牌。
编辑
如果您使用服务器端身份验证流,或者使用facebook提供的用于扩展有效访问令牌(使用客户端流获得的)的新端点,您可以获得相当长的访问令牌(大约60天),如post Removal of offline_access Permission中所述。
如果这对您有帮助,那么很好,但我建议您只确保您的应用程序可以处理令牌过期,因为您无法完全避免这种情况。
多么?好吧,你有几个选项,你需要找到一个适合你特定场景的选项,但这里有一个选项:首先,在我看来,你必须在客户端做一些事情,因为当用户正在听一首歌时,令牌可能会过期,为了从服务器端获得一个新的令牌,你必须刷新页面并将用户送到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。
当然,您还可以使用其他方法,或者订阅其他事件,只需阅读文档并尝试您拥有的选项即可。
https://stackoverflow.com/questions/10161744
复制相似问题