Часто задаваемые вопросы и устранение неполадок Facebook SDK для iOS

Вы можете использовать один и тот же ID Facebook в нескольких приложениях для iOS, например в бесплатной и платной версиях своего приложения.

Определите параметр суффикса схемы URL «FacebookUrlSchemeSuffix» в файле .plist своего приложения.

Примечание. В суффиксе могут использоваться только буквы.

В архиве SDK есть файл «FacebookSDKStrings.bundle», в котором содержатся строки для ресурсов SDK. Включите пакет в свое приложение и активируйте базовую интернационализацию (см. документацию Apple).

Нативный диалог «Поделиться» является частью приложения Facebook для iOS, поэтому его нельзя запустить в эмуляторе. Чтобы протестировать его, используйте физическое устройство. Мы ищем способы, как сделать возможным тестирование этого диалога в эмуляторе.

Вверху каждого файла, где вы хотите использовать классы Facebook SDK, должны быть указаны корректные инструкции импорта. Например:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

При использовании фреймворков в Objective-C классы, которые используют категории для расширения существующих классов, не загружаются автоматически.

Когда вы пытаетесь вызвать метод, который был расширен в этих классах, вы получаете ошибку «unrecognized selector sent to instance» (в экземпляр отправлен неопределяемый селектор). Классы, которые используются из сборщика интерфейсов Xcode, также не загружаются автоматически, например при добавлении «FBSDKLoginButton» в интерфейс с помощью представления в вашем файле .xib и настройки его как «FBSDKLoginButton» из UI сборщика интерфейсов. Если вы попытаетесь вызвать методы для них, вы получите ошибку «unrecognized selector sent to instance» (в экземпляр отправлен неопределяемый селектор). Есть два способа решения этой проблемы.

Вы можете загрузить класс вручную в делегате «application:didFinishLaunchingWithOptions:». Для этого вызовите:

[FBSDKLoginButton class];

Или можно добавить флажок линкера «-ObjC». Этот флажок дает указание линкеру загрузить в SDK все объектные файлы, которые определяют класс или категорию Objective-C. При таком подходе все наши классы будут работать со стандартными настройками, но из-за этого увеличится объем исполняемого файла (поскольку в приложение загружается дополнительный объектный код).

Чтобы добавить флажок «-ObjC», нажмите цель проекта и выберите вкладку «Build Settings» (Настройки сборки). В этой вкладке под пунктом «Linking» (Связь) дважды нажмите «Other Linker Flags» (Другие флажки линкера), чтобы добавить -ObjC.

«FBSDKRequestConnection» использует «NSURLConnection», что требует активного RunLoop. Если вы используете его вне основного потока, то управление им — ваша задача.

Либо вы можете настроить свойство «delegateQueue» в «FBSDKRequestConnection».

Ошибки конфигурации в файле .plist не редкость. Убедитесь, что файл .plist включает строки для «FacebookAppID» и «`FacebookDisplayName»,а также тип URL для «fb{app-id}».

Если вы получаете неожиданные результаты при отправке запросов API Graph, включите режим отладки. Для этого перед каждым запросом добавьте следующий код:

[FBSettings setLoggingBehavior:
    [NSSet setWithObject:FBSDKLoggingBehaviorGraphAPIDebugInfo]];

Если вы хотите блокировать информационные сообщения и оставить только предупреждения, используйте поведение «FBSDKLoggingBehaviorGraphAPIDebugWarning».

При включении этого поведения регистрации во все запросы API Graph будет добавлен параметр «debug», а все возникающие проблемы будут отображаться в консоли.

Подробнее о режиме отладки API Graph см. здесь.

SDK сообщает об отмене, если пользователь явно нажимает кнопку «Отмена» в диалоге «Вход» или если он вручную переключается обратно на ваше приложение (так называемая неявная отмена). Не следует включать процесс входа в жизненный цикл делегата приложения (например, запускать процесс входа в «application:openURL:sourceApplication:annotation:»), поскольку это будет имитировать неявную отмену. При необходимости запустите процесс входа позже в основной очереди, чтобы жизненный цикл делегата приложения успел завершиться до этого.

  • Facebook SDK включает код для доступа к Apple Advertising Identifier (IDFA), но этот код выполняется только в определенных ситуациях.
  • Facebook SDK для iOS получает доступ к IDFA только в следующих сценариях: 1) если в вашем приложении демонстрируется реклама из Facebook Audience Network или 2) если в вашем приложении регистрируются установки приложения или другие события для атрибуции этих событий к вашим рекламным кампаниям.
  • Если вы не регистрируете события в приложении (через класс FBSDKAppEvents), тогда Facebook SDK не будет иметь доступа к IDFA. Кроме того, для работы Facebook SDK не требуется AdSupport.framework.
  • Если вы хотите отслеживать события в приложении без сбора IDFA, вы можете отключить сбор IDFA в панели приложения в расширенных настройках.

Диалог «Поделиться» оповещает методы «sharer:didCompleteWithResults:» и «sharerDidCancel:», когда пользователь совершает действие.

  • «sharer:didCompleteWithResults:», когда пользователь делится материалами. В словаре «results» появится ключ «postId», если пользователь предоставил приложению разрешение «publish_actions». Если пользователь не вошел через Facebook, этот метод также будет вызван в случае нажатия кнопки отмены.
  • «sharerDidCancel:», когда человек нажимает кнопку «X» в диалоге «Поделиться» или если он вошел через Facebook и нажал кнопку отмены.

Если вы получаете неожиданные результаты при совершении запросов, включите режим отладки для «FBSDKGraphRequests». Перед каждым запросом добавьте следующий код:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

Вы сможете исправить любые ошибки, сравнив запросы и отклики серверов.

Проанализируйте другие константы «FBSDKLoggingBehavior*», определенные в «FBSDKSettings.h» для других действий, которые вы регистрируете.