iOS: подключайтесь к Facebook, не выходя из приложения для авторизации - PullRequest
7 голосов
/ 14 апреля 2011

Я знаю, что это было возможно до Graph API.

Я работаю над приложением для iPhone, которое может отсутствовать в фоновом режиме (одно из требований).
Кроме того, при запуске приложения есть экран входа в систему.
Поэтому не рекомендуется переходить в фоновый режим для аутентификации в Facebook, а затем возвращаться в приложение и снова входить в систему каждый раз, когда пользователь хочет поделиться чем-либо.

Итак, мой вопрос: есть ли способ аутентификации в Facebook, не выходя из приложения?

Кстати, я пытался использовать старый API.
Сначала это работало, но вчера перестало работать.
Я просто вижу пустой экран в старом веб-представлении входа в Facebook.
Я также проверил одно из своих старых приложений, использующих этот старый API-интерфейс Facebook Connect, и в этом приложении я тоже получаю такой же пустой экран входа.

Любая идея будет оценена.

Заранее спасибо.

-
Майкл.

Ответы [ 2 ]

8 голосов
/ 14 апреля 2011

В Facebook.m

- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
                    safariAuth:(BOOL)trySafariAuth {
  NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                 _appId, @"client_id",
                                 @"user_agent", @"type",
                                 kRedirectURL, @"redirect_uri",
                                 @"touch", @"display",
                                 kSDKVersion, @"sdk",
                                 nil];

метод закомментируйте это

 UIDevice *device = [UIDevice currentDevice];
  if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) {
    if (tryFBAppAuth) {
      NSString *fbAppUrl = [FBRequest serializeURL:kFBAppAuthURL params:params];
      didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];
    }

    if (trySafariAuth && !didOpenOtherApp) {
      NSString *nextUrl = [NSString stringWithFormat:@"fb%@://authorize", _appId];
      [params setValue:nextUrl forKey:@"redirect_uri"];

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

Это предотвратит переход приложения в фоновый режим и покажет вам стандартный диалог fb.

6 голосов
/ 02 сентября 2011

Здесь у вас есть альтернативное решение.

Если вам не нравится изменять код SDK facebook и вам нужно решение, позволяющее выбирать между SSO или старомодным механизмом, вы можете реализовать расширение следующим образом:

//Facebook_SSOExtension.h
--------------------------------------------------------

@interface Facebook(SSOExtension)
-(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO;
@end

//Facebook_SSOExtension.m
--------------------------------------------------------

//So warnings do not appear
@interface Facebook(PrivateSSOExtension)
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
                    safariAuth:(BOOL)trySafariAuth;
-(void) setPermissions:(NSArray*) permissions;
@end 

@implementation Facebook(SSOExtension)
-(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO
{
    [self setPermissions: permissions];
    [self authorizeWithFBAppAuth:useSSO safariAuth:useSSO];
}
@end

Даже если это требует больше работы, чем закомментирование кода sso, вы сможете без особых проблем обновить facebook-sdk (если они переименуют authorizeWithFBAppAuth: safariAuth: ваше расширение не будет работать, используйте asserts для выявления этой проблемы). быстро). Кроме того, если вы создаете повторно используемый компонент для взаимодействия с Facebook, не повторяя его снова и снова, это также сэкономит вам определенную работу.

Приветствие.

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