IPhone/iOS Facebook SDK - можете ли вы войти в приложение и сохранить учетные данные?
Можно ли использовать SDK для iOS для проверки подлинности в приложении (а не перейти в Safari), а также сохранить эти учетные данные для следующего запуска приложения?
Когда я пытаюсь использовать демонстрационное приложение в симуляторе, он всегда переходит на сафари для аутентификации, что кажется немного дерьмовым. И затем, когда я аутентифицирую... если я полностью убью приложение, он попросит снова подтвердить подлинность (а затем скажите, что я уже вошел в систему)
Есть ли способ, чтобы просто представить пользователю только поле электронной почты и поле пароля, а затем сохранить эту информацию в приложении?
Ответы
Ответ 1
Взгляните на этот вопрос и ответ: Iphone facebook connect example вызывает сафари. Я не хочу использовать сафари. Кроме того, вы захотите сохранить данные аутентификации в NSUserDefaults
и проверить их, чтобы предотвратить повторные логины.
EDIT Пример кода:
Чтобы сохранить материалы для входа:
[[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];
}
Ответ 2
Вы можете взломать его, чтобы остановить его, если это то, что вы действительно хотите, учитывая, что большинство других приложений, которые переносятся из старого 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
Когда вы впервые авторизуетесь, убедитесь, что вы запрашиваете разрешение "offline_access". Это сделает маркер, который OAuth вернет вам. НЕ будет признан недействительным в конце сеанса, но вместо этого останется действительным буквально, пока они не придут и не используют API для регистрации вашего приложения вне Facebook.
Затем, очевидно, вам нужно сохранить токен (я чувствую, что NSUserDefaults - прекрасное место для него) и повторно использовать его при последующих взаимодействиях FB.