Javascript Facebook SDK:如何真正退出?

时间:2014-06-11 09:44:57

标签: javascript facebook logging facebook-javascript-sdk cocoonjs

首先:我知道有很多关于同一主题的问题,但是他们都没有为我做过这个伎俩(我已经有3天试图让这个工作了)......

我正在开发一款包含一些FB功能的Javascript手机游戏(通过Javascript Facebook API)。我在尝试真的从Facebook注销并与其他用户登录时遇到了麻烦:每次我退出时,我希望调用登录功能并提示FB登录对话框我可以指定我的电子邮件和密码,但不是这样,Facebook 自动登录最后一个用户,甚至没有问我任何事情......我正在使用CocoonJS作为移动平台和普通的Javascript(没有jQuery):

登录功能:

CocoonJS.Social.Facebook.init({
    appId:<<MYAPPID>>,
    channelUrl: "channel.html"
});

var socialService = CocoonJS.Social.Facebook.getSocialInterface();

socialService.login(function(loggedIn, error) {
    if (error) {
        console.error("login error: " + error.message);
    }else if (loggedIn) {
        console.log("login suceeded");

        // Ask for extended permissions
        CocoonJS.Social.Facebook.requestAdditionalPermissions("publish", "publish_actions", 
            function(response) 
            {
                callback(response.error ? false : true);
            }
        );

        CocoonJS.Social.Facebook.getLoginStatus(function(response) {
            if (response.status === 'connected')
            {
                CocoonJS.Social.Facebook.api(
                    "/me",
                    function (response) {
                        if (response && !response.error) {
                            // Getting "me" returns the information of the "same" user!
                            console.log("User: "+response.first_name+" "+response.last_name);
                        }
                    }
                );
            }
        });
    }
});

退出功能:

CocoonJS.Social.Facebook.getLoginStatus(function(response) {
    if (response.status === 'connected')
    {
        CocoonJS.Social.Facebook.logout(function(response) {
            console.log("User logged out!");
        });
    }
});

控制台日志被抛出,所以看起来用户实际已经注销,但是当我重新启动游戏时,会出现一种“我正在做某事”的屏幕,持续时间不到一秒,同一用户登录out再次登录(甚至通过调用“我”来抛出他们的个人信息)...我期待Facebook向我询问我想要登录我的应用程序的用户,但它没有......

我认为它与“会话”或“cookies”有关,但我不知道如何通过Javascript清除它们(而且,因为我使用CocoonJS作为“浏览器”,我几乎无法控制在它上面)......任何想法?

提前感谢您的时间和精力! :)

1 个答案:

答案 0 :(得分:0)

CocoonJS使用原生iOS和Android Facebook SDK。 SDK本身负责会话存储,CocoonJS中没有使用cookie。

Facebook SDK有两种不同的关闭会话的方法:

  • close():关闭本地内存会话对象,但不清除持久性令牌缓存。
  • closeAndClearTokenInformation():关闭内存中会话,并清除与会话相关的任何持久缓存

CocoonJS.Social.Facebook.logout在Android和iOS上内部调用closeAndClearTokenInformation。它会擦除所有缓存的令牌,因此下一次登录将从头开始。

Facebook SDK使用Facebook应用程序来处理登录过程(如果它已安装在设备上),否则它将回退到基于webview的登录。问题可能是您在安装了Facebook应用程序的设备上进行测试,因此SDK可以从Facebook应用程序获取登录用户,并且不需要再次请求它。如果您从Facebook应用程序注销或在没有Facebook应用程序的设备上测试您的应用程序,Facebook将要求用户和密码。