0

首先:我知道有很多关于同一主题的问题,但没有一个对我有用(我已经花了 3 天的时间试图让这个工作)......

我正在开发一款 Javascript 手机游戏,其中包含一些 FB 功能(通过 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!");
        });
    }
});

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

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

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

4

1 回答 1

0

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

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

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

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

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

于 2014-06-13T11:01:15.730 回答