0

我正在实现以下代码来检查应用程序中我的 Facebook 会话的状态

    - (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:
                    if (!error) {
                        // We have a valid session
                        NSLog(@"User session found");

                        [self reautorizarPermisos:self ];
                    }

        break;
        case FBSessionStateClosed:
                    NSLog(@"sesion close");
                    [self    loginFB:self  ];

        break;
        case FBSessionStateClosedLoginFailed:

                    NSLog(@"sesssion failed");

                    [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }

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

    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    }
}

此代码是从此处访问 facebook 文档

我正在调用方法如下

- (IBAction)login:(id)sender {

        FBSession *sesion;
        FBSessionState state;
        NSError *error;

        [self sessionStateChanged:sesion state:state error:error];
        NSLog(@"loginnnnnnn");
    }

问题是状态没有进入任何案例,显然会话既没有打开也没有关闭或失败非常感谢您的帮助

4

2 回答 2

0

根据文档FBSessionState,可能的值为

typedef enum {
    FBSessionStateCreated = 0,
    FBSessionStateCreatedTokenLoaded = 1,
    FBSessionStateCreatedOpening = 2,
    FBSessionStateOpen = 1 | FB_SESSIONSTATEOPENBIT,
    FBSessionStateOpenTokenExtended = 2 | FB_SESSIONSTATEOPENBIT,
    FBSessionStateClosedLoginFailed = 1 | FB_SESSIONSTATETERMINALBIT,
    FBSessionStateClosed = 2 | FB_SESSIONSTATETERMINALBIT,
} FBSessionState; 

在你的switch你失踪

FBSessionStateCreated
FBSessionStateCreatedTokenLoaded
FBSessionStateCreatedOpening
FBSessionStateOpenTokenExtended

所以你的state价值很可能就是其中之一。

于 2013-01-03T21:30:34.527 回答
0

如果您只想获取会话的当前状态,例如是否处于活动状态,那么这种方法是错误的。因为这是一个委托,只有当 Fbsession 发生变化时才会触发。

为了检查 fbsession 的状态,只需执行以下代码。

if (FBSession.activeSession.isOpen)
{
     //Write code to send any message. Here Facebook Session is active
}
else
{
    //Call the Facebook Login page to login into the Facebook and start new session.
}

或者您也可以使用FBSession.activeSession.accessToken == nil

于 2013-01-03T21:40:15.800 回答