0

我有一个 php 音乐网站。我可以让用户通过 facebook 进行身份验证,并通过 hybridauth 库登录到我的网站。

现在我想要的是,每次用户听一首歌时,我都会用歌曲链接更新他的状态。既然 Facebook 正在取消对离线访问的支持,这是否可以实现,或者这是否不需要离线访问权限?

我是 facebook api 的新手。

4

1 回答 1

1

好吧,我不完全理解您的情况,但是如果用户在您想在他的墙上发布时正在使用您的应用程序,那么您就没有问题,并且您不需要“offline_access”或任何等效项..

您可以简单地将javascript SDK加载到页面,这将确保用户经过身份验证并且您拥有有效的访问令牌,如身份验证文档处理无效和过期访问令牌中所述:

使用 Javascript SDK 实现身份验证的桌面 Web 和移动 Web 应用程序

调用 FB.getLoginStatus() 或确保 status: true 在您调用 FB.init() 时设置意味着下次用户登陆您的应用程序并登录 Facebook 时,您将通过这些调用传递 authResponse 对象将包含一个新的、有效的访问令牌。

在这种情况下,它只是用户使用您的应用程序的行为,它隐式地生成了一个新的访问令牌。


编辑

如果您使用服务器端身份验证流程或使用为扩展有效访问令牌(使用客户端流程获得)提供的新端点 facebook,您可以获得相当长的访问令牌(大约 60 天),如发布删除 offline_access 权限

如果这对您有帮助,那很好,但我建议您确保您的应用程序可以处理令牌过期,因为您无法完全避免这种情况。

如何?好吧,你有几个选项,你需要找到一个适合你的特定场景的选项,但这里有一个选项:首先,正如我所看到的,你必须在客户端做事,因为令牌ca 在用户听歌时过期,为了从服务器端获取新令牌,您必须刷新页面并将用户发送到身份验证对话框,这会干扰他的体验。

这是一些使用 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

当然,您还可以使用其他方法或订阅其他事件,只需阅读文档并尝试您拥有的选项即可。

于 2012-04-15T11:50:09.793 回答