iPhone / iOS Facebook SDK - можете ли вы войти в приложение и сохранить учетные данные для входа? - PullRequest
10 голосов
/ 24 января 2011

Можно ли использовать Facebook iOS SDK для аутентификации в приложении (не переходить в Safari), а также сохранить эти учетные данные для аутентификации для следующего запуска приложения?

Когда я пытаюсь использовать демонстрационное приложение в симуляторе, оно всегда переходит к сафари для аутентификации, что кажется немного дурацким. И затем, когда я аутентифицируюсь ... если я полностью убью приложение, оно попросит снова аутентифицироваться (и затем скажет мне, что я уже вошел в систему)

Есть ли способ, просто предоставить пользователю только поле электронной почты и поле пароля, а затем сохранить эту информацию ... в приложении?

Ответы [ 3 ]

9 голосов
/ 24 января 2011

Взгляните на этот вопрос и ответьте: Пример вызова Iphone facebook connect safari.Я не хочу использовать сафари .Кроме того, вы захотите сохранить аутентификационные данные в NSUserDefaults и проверить их, чтобы предотвратить повторный вход в систему.

РЕДАКТИРОВАТЬ Пример кода:

Чтобы сохранить данные для входа:

[[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"AccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"ExpirationDate"];
[[NSUserDefaults standardUserDefaults] synchronize];

Чтобы проверить данные для входа:

_facebook = [[[Facebook alloc] initWithAppId:@"[app_id]"] retain];
_facebook.accessToken    = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"];
_facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"];
if (![_facebook isSessionValid]) {
    [_facebook authorize:_permissions delegate:self];
}
else {
    [_facebook requestWithGraphPath:@"me" andDelegate:self];
}
5 голосов
/ 24 января 2011

Вы можете взломать его, чтобы остановить, если это действительно то, что вам нужно, учитывая, что большинство других приложений, которые мигрируют со старого Facebook, подключают api к графику, будут вести себя по-новому

В Facebook.m найдите следующий метод

- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
                    safariAuth:(BOOL)trySafariAuth

найдите нижнюю часть логики didOpenOtherApp и закомментируйте все над ней, чтобы она всегда открывалась в строке и настраивала этот раздел кода, который содержится в фигурных скобках! didOpenOtherApp

// 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];
  }

Однако, делая это, вы повышаете вероятность того, что пользователю придется вводить свои учетные данные, что, безусловно, хуже, чем мириться с подходом быстрого переключения приложений?

3 голосов
/ 24 января 2011

Когда вы впервые авторизуетесь, убедитесь, что вы запрашиваете разрешение "offline_access".Это сделает маркер, который OAuth возвращает вам, НЕ будет признан недействительным в конце сеанса, но вместо этого будет оставаться действительным буквально до тех пор, пока они не появятся и не будут использовать API для регистрации вашего приложения вне Facebook.

Тогда, очевидно,, вам нужно сохранить токен (я чувствую, что NSUserDefaults - отличное место для него) и использовать его повторно при последующих взаимодействиях FB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...