0

我正在使用 facebooksdk.framework 3.1

当我使用我的帐户登录我的应用程序时,即使基于 Web 的身份验证
已完成,也会弹出本机登录对话框。我需要关闭本机登录对话框或基于 Web 的身份验证,但我不知道如何。

我试图找到 facebook.m 文件,但 facebooksdk.framework 3.1 上没有这样的文件

如何关闭 safariauth 或本地身份验证?很奇怪两个登录过程同时发生。

4

2 回答 2

1

首先去 facebook.m 页面并尝试找到以下方法:

- (void)authorize:(NSArray *)permissions
         delegate:(id<FBSessionDelegate>)delegate
       localAppId:(NSString *)localAppId 

在这个方法中有一行:[self authorizeWithFBAppAuth:YES safariAuth:NO];

根据您的需要将 authorizeWithFBAppAuth & safariAuth 更改为是/否。希望它对您有所帮助。

或者您可以尝试实施最新的 Share kit sdk。这是最好的方法。

于 2012-11-23T07:27:54.487 回答
-2

如果你使用 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”的值,我检查用户是否登录。

于 2012-11-26T05:23:01.240 回答