我正在使用 facebooksdk.framework 3.1
当我使用我的帐户登录我的应用程序时,即使基于 Web 的身份验证
已完成,也会弹出本机登录对话框。我需要关闭本机登录对话框或基于 Web 的身份验证,但我不知道如何。
我试图找到 facebook.m 文件,但 facebooksdk.framework 3.1 上没有这样的文件
如何关闭 safariauth 或本地身份验证?很奇怪两个登录过程同时发生。
首先去 facebook.m 页面并尝试找到以下方法:
- (void)authorize:(NSArray *)permissions
delegate:(id<FBSessionDelegate>)delegate
localAppId:(NSString *)localAppId
在这个方法中有一行:[self authorizeWithFBAppAuth:YES safariAuth:NO];
根据您的需要将 authorizeWithFBAppAuth & safariAuth 更改为是/否。希望它对您有所帮助。
或者您可以尝试实施最新的 Share kit sdk。这是最好的方法。
如果你使用 phonegap facebook 插件,你应该小心调用 FB.getLoginStatus()。
如果 FB.getLoginStatus() 在 FB.init() 完成之前触发,该函数将返回响应为
'未连接',即使用户已经连接。
我的登录问题是由于重定向页面上的 FB.getLoginStatus() 引起的。
即使用户成功登录并进入我的重定向页面,该页面也会运行 FB.getLoginStatus()
结果总是“未连接”,因为 FB.init() 没有完全执行。
facebook 提供了异步功能来解决这个问题,但是当我在 phonegap 上测试时它不起作用。
要检查用户登录,我现在使用 FB.Event.subscribe 和 localstorage。
在需要 FB 功能的页面上,我添加了这个 javascript 代码
FB.Event.subscribe('auth.login', function(response){
localStorage.setItem('fblogin', true);
console.log('login event');
}
FB.Event.subscribe('auth.logout', function(response){
localStorage.setItem('fblogin', false);
console.log('logout event');
}
document.addEventListener('deviceready', function(){
try{
FB.init({ appId : '1234567889' , nativeInterface : CDV.FB, useCachedDialogs : true});
}catch(e){
alert(e);
}
var fbval = localStorage.getItem('fblogin');
if(fbval){
// your code for connected status
}
});
基本上,每当发生登录事件时,我将“fblogin”localStorage 值设置为 true,
并在发生注销事件时将值设置为“false”。
通过比较“fblogin”的值,我检查用户是否登录。