FaceBook API, вход в приложение - PullRequest
       27

FaceBook API, вход в приложение

4 голосов
/ 07 августа 2011

Я следовал этому руководству и успешно создал свое приложение с интеграцией Facebook.

В чем проблема?

Когда пользовательдолжен выполнить вход, приложение закрывается в браузере (или в приложении Facebook, если оно установлено)

Как сохранить аутентификацию полностью в приложении?

Ответы [ 2 ]

3 голосов
/ 07 августа 2011

Смысл входа в систему oAuth заключается в том, что это не происходит в вашем приложении. Он использует быстрое переключение приложений для выполнения аутентификации в доверенной среде (Safari или приложение Facebook).

Однако вы можете изменить Facebook.m для выполнения аутентификации в вашем приложении, но учетные данные вашего пользователя не будут запомнены. Вы можете видеть, что если ваше устройство iOS не поддерживает многозадачность, появится диалоговое окно резервного копирования.

Выдержка из Facebook.m (около строки 160):

if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) {
    if (tryFBAppAuth) {
      NSString *scheme = kFBAppAuthURLScheme;
      if (_localAppId) {
        scheme = [scheme stringByAppendingString:@"2"];
      }
      NSString *urlPrefix = [NSString stringWithFormat:@"%@://%@", scheme, kFBAppAuthURLPath];
      NSString *fbAppUrl = [FBRequest serializeURL:urlPrefix params:params];
      didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];
    }

    if (trySafariAuth && !didOpenOtherApp) {
      NSString *nextUrl = [self getOwnBaseUrl];
      [params setValue:nextUrl forKey:@"redirect_uri"];

      NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params];
      didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];
    }
}

// If single sign-on failed, open an inline login dialog. This will require the user to
// enter his or her credentials
if (!didOpenOtherApp) {
    [_loginDialog release];
    _loginDialog = [[FBLoginDialog alloc] initWithURL:loginDialogURL
                                      loginParams:params
                                         delegate:self];
    [_loginDialog show];
}

Если вы удалите первое условное выражение, содержащее код и установив для didOpenOtherApp значение NO, вы можете получить искомое поведение.

2 голосов
/ 04 ноября 2011

Чтобы отключить это поведение, измените строку 275 на Facebook.m и установите обе опции на NO.

- (void)authorize:(NSArray *)permissions {
  self.permissions = permissions;

  // with both options NO, authorization always happens in-app
  [self authorizeWithFBAppAuth:NO safariAuth:NO];
}
...