2015-04-02 1 views
3

Я создаю приложение iOS с iOS SDK 4.0 для Facebook, используя простой диалог входа в систему Facebook с классом вида FBSDKLoginButton.Надежная проверка активной сессии при запуске приложения в Facebook iOS SDK v4.0

При запуске приложения после предыдущего успешного входа в систему кнопка отображается правильно в состоянии «войти в систему», то есть отображает текст «Выход из системы».

Однако [FBSDKAccessToken currentAccessToken] - это ничто, поэтому мое приложение не осознает активный сеанс и, таким образом, не заполняет поля, связанные с FB, данными.

Поскольку класс FBSession больше не существует с FB iOS SDK4.0, как я могу правильно определить, существует ли кешированный сеанс?

Я предполагал, что это был способ сделать это [FBSDKAccessToken currentAccessToken]. Но, как уже упоминалось, currentAccessToken не установлен ... Любые идеи, почему это может быть нулевым, или как правильно определить активный/кешированный сеанс?

EDIT: Я поместил вызов currentAccessToken в метод viewDidLoad моего главного контроллера вида, который содержит кнопку объявления диалога входа в систему Facebook. К сожалению, currentAccessToken равен нулю, как описано выше. Любые предложения, почему он недоступен?

EDIT2: Bigman решил проблему (см. Его комментарии в ответе ниже): Получение currentAccessToken в viewDidAppear вместо viewDidLoad сделал трюк.

ответ

0

Способ получения этого токена - вы хотите предоставить делегату этот FBSDKLoginButton. Я делаю один мой вид контроллера соответствует FBSDKLoginButtonDelegate и я реализовал

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 

    let token = result.token 

    println(token) 
} 

В раскадровке я установил этот вид контроллер к FBSDKLoginButton. Значок не равен нулю во время выполнения.

[Моя вторая попытка]

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 

    let token = result.token 

    let accessToken = FBSDKAccessToken.currentAccessToken() 

    println(accessToken) 

} 
+0

Благодарим вас за ответ. Однако я сделал именно это. Я пишу в объективе-c, но не использую раскадровки, но в противном случае я уже сделал то, что вы предложили. Тем не менее, при запуске нет кэшированного токена. – HotelMama

+0

Установили ли вы контрольную точку внутри функции и видите ли она ломается? – Bigman

+0

Да, реальный вход в систему работает отлично. Моя проблема заключается в том, что при перезагрузке приложения после успешного входа в систему нет кэшированного токена. То есть currentAccessToken равен нулю, хотя FBSDKLoginButton показывает состояние входа в систему, указывая, что сеанс все еще запущен. – HotelMama

3

Добавьте следующее в ваших AppDelegate didFinishLaunchingWithOptions:.

return [[FBSDKApplicationDelegate sharedInstance] application:application 
            didFinishLaunchingWithOptions:launchOptions]; 

Это получит вам [FBSDKAccessToken currentAccessToken], когда пользователь вошел в систему

см до: https://developers.facebook.com/docs/ios/getting-started#startcoding

+1

Спасибо за ответ, но я уже «подключил» 'FBSDKApplicationDelegate', как вы описали. Я также реализовал приложение метода: openURL: sourceApplication: аннотация :, и связал его с FBSDKApplicationDelegate. Тем не менее, currentAccessToken равен нулю при запуске, хотя FBSDKLoginButton отображает свое состояние входа в систему. – HotelMama

9

Так что я просто наткнулся на это сам.

Цель: при запуске приложения, если токен уже был получен из предыдущей успешной попытки входа в систему, выполните некоторую альтернативную логику (в моем случае, запуск непосредственно на другой контроллер представления).

Ключевым моментом здесь является то, что первоначально производил Dheeraj.

[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; 

В ту минуту, когда вы обращаетесь к своему общему делегату, то есть когда они просыпаются все. Пример кода. Это может быть очень плохой практикой, я не уверен, это именно то, как я получил ее на работу.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [FBSDKLoginButton class]; 
    [FBSDKProfile enableUpdatesOnAccessTokenChange:YES]; 
    NSLog(@"What the heck, no token? %@", [FBSDKAccessToken currentAccessToken]); 
    //Output: What the heck, no token? (nil) 
    BOOL fbDidFinish = [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; 
    NSLog(@"Hey! My Token! %@", [FBSDKAccessToken currentAccessToken]); 
    //Output: Hey! My Token! <FBSDKAccessToken: 0x7fddf8d136a0> 
    //Your address in memory will be different 
    //At this point, you can do additional logic based on having the Token, like skipping ahead to a different ViewController 
    return fbDidFinish; 
} 

Предполагая, что вы уже успешно вошли в систему раньше, вы должны увидеть свой токен доступа на втором выходе журнала. Надеюсь это поможет.

+0

Причина, по которой мой токен = нуль? –

Смежные вопросы