Facebook SSO и регистрация на сторонних сайтах за один шаг?

Да/Нет + еще вопрос:

Можно ли использовать систему Facebook SSO и одновременно регистрировать пользователя для собственного веб-сайта/приложения?

Например, требуется всего одно нажатие клавиши со стороны пользователя.

Кроме того, есть ли рабочие примеры этого на iPhone и Android?

Из того, что я прочитал, есть процесс для единого входа и отдельный процесс для регистрации.

Причина в том, что я хотел бы вести собственный учет пользовательских данных в дополнение к тому, что facebook дает мне через систему Insights, НО я хотел бы сделать это как можно безболезненнее.

t;;dr Делалось ли это раньше, какие есть примеры и какая-либо полезная и актуальная документация?


person Hayk Saakian    schedule 24.07.2011    source источник


Ответы (1)


Не совсем уверен, что правильно вас понял, но если предположить, что вы хотите зарегистрировать пользователя в своей собственной системе, не представляя отдельный рег-флоу (?), вы можете сделать следующее:

  1. Попросите пользователя авторизовать ваше приложение (например, через систему единого входа или обычный процесс FB — использование последней версии Facebook SDK вызовет соответствующий процесс). Обязательно запросите любые дополнительные разрешения, которые вам понадобятся для собственной регистрации.
  2. Как только ваше приложение будет уведомлено об авторизации Facebook, извлеките все пользовательские данные, необходимые для регистрации, через API Facebook (например, используя путь графа /me?fields=id,name,email, чтобы получить идентификатор FB, имя и адрес электронной почты). Graph API Explorer удобен для проверки доступных полей.
  3. Используйте ответ из (2), чтобы сделать POST свою собственную систему для создания учетной записи.
  4. Как только ваш запрос на создание учетной записи будет завершен, позвольте пользователю начать делать все, что он должен делать в вашем приложении (= все готово!). И, возможно, сохранить какой-то идентификатор учетной записи в клиенте (устройстве), если он вам понадобится позже.

Чтобы сделать этот поток плавным для пользователя, вам, вероятно, следует показывать индикатор загрузки/прогресса на шагах 1-4.

документация SDK от Facebook поможет вам приступить к шагу (1).

Некоторый пример кода (Objective-C) для шага (2) и частично (3):

- (void)facebookUserAuthorized
{
    [FBRequestConnection startWithGraphPath:@"me"
                                 parameters:[NSDictionary dictionaryWithObject:@"id,name,birthday,first_name,last_name,gender,email" forKey:@"fields"]
                                 HTTPMethod:@"GET"
                          completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                              NSDictionary *userData = (NSDictionary*)result;
                              [self registerUserWithEmail:[userData objectForKey:@"email"]
                                               facebookId:[userData objectForKey:@"id"]
                                                   gender:[userData objectForKey:@"gender"]];
                          }];
}

- (void)registerUserWithEmail:(NSString*)email facebookId:(NSString*)facebookId gender:(NSString*)gender
{
    // Send a POST to your own server with the user details
}

И я уверен, что вы можете применить тот же принцип на Android. Чтобы начать работу, ознакомьтесь с документацией Facebook по Android.

person Kristofer Sommestad    schedule 06.10.2012
comment
Спасибо за ответ. С тех пор, как я задал этот вопрос, я узнал намного больше о внутренней разработке, и facebook sdk также улучшился. Я задал этот вопрос, потому что больше всего меня беспокоил весь процесс, связанный с UI/UX. Может ли аналогичный процесс быть более плавным с другими системами SSO, такими как Google или Twitter? - person Hayk Saakian; 07.10.2012
comment
В iOS 6 система единого входа Twitter и Facebook очень похожа и позволяет обеспечить беспрепятственный процесс регистрации (в этом, по сути, и заключается смысл их интеграции в саму iOS). Не совсем уверен, как работает процесс Google, но я предполагаю, что все они в значительной степени одинаковы (хотя Google меньше поддерживается на iOS). - person Kristofer Sommestad; 08.10.2012