首先:我知道有很多关于同一主题的问题,但是他们都没有为我做过这个伎俩(我已经有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作为“浏览器”,我几乎无法控制在它上面)......任何想法?
提前感谢您的时间和精力! :)
答案 0 :(得分:0)
CocoonJS使用原生iOS和Android Facebook SDK。 SDK本身负责会话存储,CocoonJS中没有使用cookie。
Facebook SDK有两种不同的关闭会话的方法:
CocoonJS.Social.Facebook.logout在Android和iOS上内部调用closeAndClearTokenInformation。它会擦除所有缓存的令牌,因此下一次登录将从头开始。
Facebook SDK使用Facebook应用程序来处理登录过程(如果它已安装在设备上),否则它将回退到基于webview的登录。问题可能是您在安装了Facebook应用程序的设备上进行测试,因此SDK可以从Facebook应用程序获取登录用户,并且不需要再次请求它。如果您从Facebook应用程序注销或在没有Facebook应用程序的设备上测试您的应用程序,Facebook将要求用户和密码。