API Facebook — где создать экземпляр и как правильно реализовать handleOpenURL

Я работаю через API Facebook для своего приложения для iPhone, и у меня есть два вопроса:

Вся документация/примеры, похоже, помещают все в appDelegate: создание экземпляра объекта Facebook и авторизацию в appDidFinishLaunching и переопределение метода application:handleOpenURL.

В моем приложении я не хочу, чтобы что-то происходило, пока пользователь не перейдет к определенному представлению и не нажмет кнопку. Я понимаю, что в этом представлении я создам экземпляр объекта Facebook и начну авторизацию в методе обработчика кнопки, но как насчет обработки переопределения application:handleOpenURL? Мне пришлось бы использовать другой объект FB (созданный в моем делегате приложения), чем тот, который используется в моем конкретном контроллере представления.

  1. Требует ли эта ситуация синглтона? Или это хорошее дизайнерское решение, позволяющее моему appDelegate создавать экземпляр объекта FB и получать к нему доступ там, где мне это нужно в моей программе?

    В документах FB вам говорят переопределить метод application:handleOpenURL:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [facebook handleOpenURL:url]; 
}
  1. Как написано, не означает ли это, что ваше приложение сможет открывать только один тип URL? Если вашему приложению нужно ответить более чем на один, вам нужно будет проанализировать параметр url, чтобы выяснить, какое действие предпринять, верно?

Спасибо!


person djibouti33    schedule 22.02.2011    source источник


Ответы (1)


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

2) application:handleOpenURL method: - это способ вызова приложения извне FB sdk позволяет выполнять аутентификацию из приложения facebook, если оно установлено, или сафари. После аутентификации ваше приложение вызывается с помощью этого обработчика. Это работает таким образом только с устройствами, поддерживающими многозадачность. Это предпочтительный способ упростить вход в систему и совместное использование сеанса. Но это не обязательно... Приложение может поддерживать несколько схем URL, объявленных в приложении, которые вы можете проверить (не проверено, но должно быть что-то вроде этого):

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
  if ([url.scheme isEqualToString:@"fb<yourid>"])
    return [facebook handleOpenURL:url];
  else {
    // do what you want
    return YES;
  }
}
person Vincent Guerci    schedule 22.02.2011
comment
Спасибо за ответ. Я понимаю, что приложение может поддерживать несколько схем URL, но простое добавление кода, который они предоставляют, где метод handleOpenURL просто возвращает [facebook handleOpenURL:], означает, что мое приложение не сможет этого сделать, правильно? Если бы я хотел обрабатывать несколько URL-адресов, мне нужно было бы изменить их пример, чтобы обрабатывать каждый URL-адрес отдельно, верно? - person djibouti33; 22.02.2011
comment
Безопаснее проверять, начинается ли URL-адрес с fb, на случай, если вы по какой-то причине измените свой идентификатор. Тогда вам не нужно помнить, чтобы изменить его в 15 местах. - person Maciej Swic; 28.08.2012