Как авторизовать пользователя через ДИАЛОГ с НОВЫМ API Facebook Connect iOS? - PullRequest
6 голосов
/ 06 апреля 2011

Я понимаю - http://developers.facebook.com/docs/guides/mobile/#ios - кажется действительно полезным, но мое приложение не поддерживает многозадачность, поэтому этот метод "кросс-сафари" мне не подойдет.

Есть ли где-нибудь краткий пример (или кто-то может скопировать сюда) процесса аутентификации через FBDialogs (с этим так называемым "новым" API)? Я только знакомлюсь с этим SDK, поэтому, пожалуйста, как можно проще.

Ответы [ 2 ]

10 голосов
/ 16 апреля 2011

Изо всех сил пытался понять это за пару часов ...

Вот решение для обхода аутентификации fb app | background-safari, и это просто изменить в Facebook.m:

[self authorizeWithFBAppAuth:YES safariAuth:YES]

до

[self authorizeWithFBAppAuth:NO safariAuth:NO]

в методе:

- (void)authorize:(NSArray *)permissions
     delegate:(id<FBSessionDelegate>)delegate

.

Проверено на примере кода, ничего не меняя (конечно, установите kAppId на ваш)

Я был совершенно зол, почему FB не документировал это ...

Надеюсь, это поможет,

Приветствия

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

Все magic находятся в

- (void)authorize:(NSArray *)permissions
     delegate:(id<FBSessionDelegate>)delegate

, что вызывает [self authorizeWithFBAppAuth:YES safariAuth:YES]:

  • FBAppAuth:YES будет пытаться аутентифицироваться с помощью приложения Facebook, если установлено
  • safariAuth:YES попытается пройти аутентификацию с помощью Safari, если устройство поддерживает многозадачность

Итак, вы хотите [self authorizeWithFBAppAuth:NO safariAuth:NO]

Если вы хотите оставить Не измененный Facebook SDK вы можете просто «выставить» свои приватные API:

@interface Facebook (Private)
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
                    safariAuth:(BOOL)trySafariAuth;
@end

, а затем расширить, если с категорией:

@interface Facebook (MyApp)
- (void)myAuthorize:(id<FBSessionDelegate>)delegate;
@end

@implementation Facebook (MyApp)

- (void)myAuthorize:(id<FBSessionDelegate>)delegate {
  _permissions = [[NSArray arrayWithObjects:@"email", *(whatever you need)*, nil] retain];
  _sessionDelegate = delegate;
  [self authorizeWithFBAppAuth:NO safariAuth:NO]; // force in app auth
}

@end

Затем использовать его почтиобычно :

 Facebook *facebook = [[Facebook alloc] initWithAppId:MY_APP_FB_ID];
 [facebook myAuthorize:self];

Это популярный запрос, который они не реализовали, есть даже запросов на получение с решениями ...

...