【问题标题】:sessionStateChanged ios 6 facebook sdk 3.1sessionStateChanged ios 6 facebook sdk 3.1
【发布时间】:2013-01-03 21:08:10
【问题描述】:

我正在实现以下代码来检查应用程序中我的 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 documentation

我调用方法如下

- (IBAction)login:(id)sender {

        FBSession *sesion;
        FBSessionState state;
        NSError *error;

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

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

【问题讨论】:

  • 为什么不记录state的值?
  • 是的,值为858157003,没有意义
  • 即枚举值的整数表示。它肯定是有意义的,尝试将它与 all enum 的可能值进行比较,而不是像您现在所做的那样仅 3。检查我的答案。

标签: objective-c ios facebook ios6 facebook-login


【解决方案1】:

如果您只想获取会话的当前状态,例如是否处于活动状态,那么这种方法是错误的。因为这是一个委托,只有在 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查看状态

【讨论】:

  • 或者您也可以使用 (FBSession.activeSession.accessToken == nil) 来检查状态
【解决方案2】:

根据documentationFBSessionState 的可能值是

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 值很可能就是其中之一。

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 2012-09-26
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多