簡體   English   中英

sessionStateChanged iOS 6 Facebook SDK 3.1

[英]sessionStateChanged ios 6 facebook sdk 3.1

我正在實現以下代碼,以檢查應用程序中我的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");
    }

問題是狀態沒有進入任何情況,顯然會話既未打開,未關閉或失敗,非常感謝您的幫助

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

如果您只想使會話的當前狀態為活動狀態,則該方法是錯誤的。 因為這是一個委托,並且僅在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檢查狀態

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM