Как реализовать единый вход (SSO) с помощью Facebook IOS SDK для iPhone - PullRequest
3 голосов
/ 22 июля 2011

Я использую последнюю версию Facebook IOS SDK в моем приложении. Для реализации единого входа Facebook сообщает:

Измените основной класс приложения AppDelegate следующим образом:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

В этом методе вызовите метод handleOpenURL объекта Facebook вашего приложения, обязательно передав параметр url.

Мой запрос:

  1. Какая польза от вышеуказанного метода? Зачем это называть? Если я скрываю метод в демонстрационном приложении facebook, при условии, что он всегда перенаправляет меня на страницу входа снова и снова. Если я раскрою этот метод, он перенаправит меня к выходу из системы с другими кнопками (это правильно)

  2. Теперь, когда этот метод определен в файле ApplicationDelegate.m, и мы должны вызвать в нем объект facebook. Как я могу ссылаться на объект facebook в этом методе, поскольку мой объект facebook определен в классе контроллера представления, который в 4 раза ниже по иерархии.

ПРИМЕЧАНИЕ: я попробовал DemoApp. Я не понимаю, как они ссылаются на объект facebook в файле AppDelegate.m, несмотря на объект facebook, объявленный в файле ViewController.

1 Ответ

6 голосов
/ 22 июля 2011

Этот метод используется для определения того, будет ли ваше приложение «обрабатывать» переданный ему URL-адрес. Например, ваше приложение может обрабатывать определенный URL-адрес «схемы», а затем выбирать во время выполнения, будет ли оно обрабатывать определенный URL-адрес. Если вы вернете НЕТ, он перейдет к другому приложению, которое также может обрабатывать ту же схему URL. Хотя в случае Facebook iOS SDK ваше приложение будет единственным приложением, обрабатывающим схему URL.

Когда вы пытаетесь войти в Facebook, SDK передает значения либо в приложение Facebook, либо на веб-сайт Facebook, и включает URL-адрес обратного вызова, чтобы можно было завершить процесс авторизации. Без этого метода в делегате приложения этот обратный вызов не будет работать должным образом.

Для получения дополнительной информации о oAuth см .:

http://developers.facebook.com/docs/authentication/

Во-вторых, это более важный вопрос, чем просто SDK Facebook. Это связано с основной архитектурной проблемой. Вы можете включить объект Facebook в делегат приложения, а затем ссылаться на него в контроллере представления. Это самый простой метод. В контроллере вида вы можете просто сделать следующее:

Facebook *facebook = [(YourAppDelegate *)[UIApplication sharedApplication] delegate] facebook];

Эта опция не всегда идеальна, потому что она заставляет приложение делегировать дамп для множества общих экземпляров.

Другой вариант - попросить делегата приложения передать объект Facebook контроллеру представления при его создании (у контроллера представления будет свойство для объекта Facebook - и затем делегат приложения передаст его контроллеру представления после инициализации. ).

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
vc.facebook = self.facebook;

Существуют также другие варианты для совместного использования экземпляров классов, такие как платформа Objection iOS, но они немного более продвинуты.

...