Глубокие ссылки и FBSessionDelegate в Facebook iOS SDK 3.0

Я прочитал http://developers.facebook.com/docs/howtos/link-to-your-native-app/, и я не понимаю, как я должен обрабатывать глубокие ссылки в 3.0. Скажем, пользователь нажимает appRequest для моего приложения, и FB открывает мое приложение со специальным URL-адресом. У меня есть метод openURL моего Appdelegate:

return [FBSession.activeSession handleOpenURL:url];

Учебник говорит:

If your app requires an authorized user, handle the processing of the target URL in the
SDK callbacks implemented after a successful login, the fbDidLogin method.

Однако метод делегата fbDidLogin больше не вызывается, поскольку в версии 3.0 мы переключаемся на использование FBSession.activeSession вместо использования объекта facebook.m. На самом деле, ни один из методов FBSessionDelegate никогда не будет вызываться, потому что состояние объекта facebook никогда не изменяется. Итак, где я должен обрабатывать URL-адрес?


person stipe108    schedule 28.08.2012    source источник


Ответы (1)


Скорее всего, вы справитесь с этим в обработчике, который вы настроили при открытии сеанса.

Скажем, например, что вы открыли сеанс, используя что-то вроде:

[FBSession openActiveSessionWithReadPermissions:nil
                                      allowLoginUI:YES
                                 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:
            if (!error) {
                // Handle deep link      
            }
            break;
        case FBSessionStateClosed:
            self.user = nil;
            break;
        case FBSessionStateClosedLoginFailed:
            self.user = nil;
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }

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

Чтобы увидеть рабочий пример обработки ссылок на контент, см. https://github.com/fbsamples/ios-social-cafe/

person C Abernathy    schedule 22.10.2012