用于 iOS 登录问题的 Facebook SDK 3.1

Posted

技术标签:

【中文标题】用于 iOS 登录问题的 Facebook SDK 3.1【英文标题】:Facebook SDK 3.1 for iOS login issues 【发布时间】:2012-11-08 13:30:01 【问题描述】:

我在我的 ios 应用程序中使用 Facebook sdk 3.1 在朋友墙上分享链接。我尝试在 applicationDidFinishLaunching 方法中打开一个新会话,如下所示

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

myAppDelegate = self;

AudioViewController *viewController = [[AudioViewController alloc] init];
self.navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.navController setNavigationBarHidden:YES];
viewController = nil;


self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];

if (![self openSessionWithAllowLoginUI:NO]) 
    // No? Display the login page.
    [self performSelector:@selector(login) withObject:nil afterDelay:0.5];


return YES;


- (void)login
[self openSessionWithAllowLoginUI:YES];


- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI 
return [FBSession openActiveSessionWithReadPermissions:nil
                                          allowLoginUI:allowLoginUI
                                     completionHandler:^(FBSession *session, FBSessionState state, NSError *error) 
                                         [self sessionStateChanged:session state:state error:error];
                                     ];


- (void)sessionStateChanged:(FBSession *)session
                  state:(FBSessionState)state
                  error:(NSError *)error

switch (state) 
    case FBSessionStateOpen: 
        DLOG(@"session open");
    
        break;
    case FBSessionStateClosed: 

        DLOG(@"session closed");


        [FBSession.activeSession closeAndClearTokenInformation];


    
        break;
    case FBSessionStateClosedLoginFailed: 


         DLOG(@"session Failed");


    
        break;
    default:
        break;


[[NSNotificationCenter defaultCenter] postNotificationName:WVSessionStateChangedNotification
                                                    object:session];

if (error) 
    DLOG(@"error = %@",error);
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"Error: %@",
                                                                 [AppDelegate FBErrorCodeDescription:error.code]]
                                                        message:error.localizedDescription
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
    [alertView show];


对于某些 Facebook 帐户,它会返回错误“操作无法完成”com.facebook.sdk 错误 2。因此无法在 Facebook 上发帖。

我在这里做错了吗?任何帮助将不胜感激。!

【问题讨论】:

您在登录过程中是否收到此错误? 您是否在登录 facebook 的位置添加了 facebook 方法 离题,但通过 API 发布到朋友的墙上已被弃用,并且在 2013 年 2 月 6 日之后将不可用。 【参考方案1】:

我遇到了同样的问题,我通过 NSTimer 调用 openSessionWithAllowLoginUI:TRUE 解决了这个问题。

if (![self openSessionWithAllowLoginUI:NO]) 
    // No? Display the login page.
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(login) userInfo:nil repeats:NO];

原因是,我们无法在不同的线程上获得 FB 会话,我们要么使用主线程,要么使用另一个(后台)线程。在您的代码中,当您检查会话可用性时,您使用主线程,而登录时,您通过 performSelector 函数使用不同的线程。

希望对你有帮助。

谢谢

【讨论】:

以上是关于用于 iOS 登录问题的 Facebook SDK 3.1的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不使用 iOS SDK 的情况下集成 Facebook 登录?

iOS facebook SDK:登录已通过身份验证

Facebook iOS SDK 不存储用于访问的 cookie

Facebook SDK IOS登录问题

iOS Facebook SDK:哪个登录系统更好?

facebook iOS sdk的登录注销问题