Публикация контента в iOS

После интеграции входа через Facebook, публикации на Facebook или Facebook Gaming определенные события в приложении будут автоматически регистрироваться и собираться для Events Manager, если только вы не отключите эту функцию. Мы рекомендуем разработчикам приложений, использующих вход через Facebook, публикацию на Facebook или Facebook Gaming, разобраться, как работает эта функция. Подробнее о том, какая информация собирается и как отключить автоматическую регистрацию событий в приложении, см. в разделе Автоматическая регистрация событий в приложении.

Дополнительные сведения о Facebook iOS SDK см. в этой статье.

Из этого руководства вы узнаете, как публиковать контент из приложения для iOS в Facebook. Контент, которым люди делятся через ваше приложение, появляется в их хронике и Лентах их друзей.

Предварительные требования

Прежде чем интегрировать в свое приложение функцию публикации, выполните следующие действия:

  • добавьте в среду разработки мобильных приложений Facebook SDK для iOS;
  • настройте ID приложения Facebook и свяжите его со своим приложением;
  • укажите ID своего приложения, его отображаемое имя и причину, по которой пользователям предлагается предоставить вашему файлу .plist доступ к фото;
  • создайте в FBSDKShareKit.framework ссылку на свой проект.

Ваше приложение не должно автоматически заполнять поля для контента, которым люди хотят поделиться. Это нарушение Политики платформы Facebook (см. правила для разработчиков).

Начать работу с SDK для iOS

Моделирование контента

Для каждого типа контента предусмотрен интерфейс, соответствующий модели SharingContent. Смоделировав контент, добавьте в приложение интерфейс публикации, соответствующий модели Sharing, или используйте класс ShareDialog.

Когда человек публикует на Facebook ссылку из вашего приложения, в нее добавляется contentURL. Подготовьте контент для ссылок, используя модель ShareLinkContent.

Пример кода для запуска публикации:

guard let url = URL(string: "https://developers.facebook.com") else {
    // handle and return
}

let content = ShareLinkContent()
content.contentURL = url

let dialog = ShareDialog(
    viewController: self,
    content: content,
    delegate: self
)
dialog.show()

Примечание. Если в публикациях содержатся ссылки на iTunes или Google Play, мы не публикуем изображения или описания из приложения. Вместо этого мы публикуем информацию о приложении, полученную краулером Webcrawler напрямую из магазина приложений, в которой могут отсутствовать изображения. Чтобы предварительно просмотреть публикуемую ссылку на iTunes или Google Play, введите URL ссылки в отладчике репостов.

Фото

Люди могут делиться на Facebook фото из вашего приложения. Для этого можно использовать диалог "Поделиться" или пользовательский интерфейс.

  • Размер фото не должен превышать 12 МБ.
  • На устройстве должно быть установлено нативное приложение Facebook для iOS (версии 7.0 или выше).

Подготовьте контент фото для публикации, используя модель SharePhotoContent.

func imagePickerController(
    _ picker: UIImagePickerController, 
    didFinishPickingMediaWithInfo 
    info: [UIImagePickerController.InfoKey : Any]
) {
    guard let image = info[.originalImage] as? UIImage else {
        // handle and return
        return
    }
    let photo = SharePhoto(
        image: image,
        userGenerated: true
    )
    var content = SharePhotoContent()
    content.photos = [photo]
    // use the content
}

Видео

Люди могут делиться на Facebook видео из вашего приложения. Для этого можно использовать диалог "Поделиться" или пользовательский интерфейс.

  • Размер видео не должен превышать 50 МБ.
  • На устройстве должен быть установлен клиент Facebook для iOS (версии 26.0 или выше).

Подготовьте контент видео для публикации, используя модель FBSDKShareVideoContent. Список всех атрибутов см. в справке по FBSDKShareVideoContent.

func imagePickerController(
    _ picker: UIImagePickerController,
    didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]
) {
    let video: ShareVideo

    if #available(iOS 11, *) {
        guard let videoAsset = info[.phAsset] as? PHAsset else {
            return
        }
        video = ShareVideo(videoAsset: videoAsset)
    } else {
        guard let url = info[.referenceURL] as? URL else {
            return
        }
        video = ShareVideo(videoURL: url)
    }
}

Мультимедийный контент

Пользователи вашего приложения могут делиться на Facebook контентом, содержащими фото и видео. Для этого используется диалог "Поделиться". Обратите внимание на следующие ограничения.

  • На устройстве должен быть установлен клиент Facebook для iOS.
  • Размер фото не должен превышать 12 МБ, а видео — 50 МБ.
  • Человек может опубликовать не более одного видео и до 29 фото или просто 30 фото.

Подготовьте мультимедийный контент для публикации, используя модель ShareMediaContent.

let photo = SharePhoto(...)
let video = ShareVideo(...)

var content = ShareMediaContent()
content.media = [photo, video]

Методы публикации

Создав модель для контента, вызовите диалог "Поделиться" или диалог сообщения.

Кнопки

В iOS предусмотрены нативные кнопки Facebook, которые позволяют запускать диалог "Поделиться".


Кнопка "Поделиться"

С помощью этой кнопки люди могут публиковать контент в своей хронике в Facebook, в хронике своих друзей или в группе. Кнопка "Поделиться" вызывает диалог "Поделиться". Чтобы реализовать кнопку "Поделиться", добавьте в представление следующий фрагмент кода:

var button = FBShareButton()
button.shareContent = content
// Add button to view

Кнопка "Отправить"

Кнопка "Отправить" позволяет делиться фото, видео и ссылками с друзьями и контактами в личных сообщениях в приложении Facebook Messenger. Кнопка "Отправить" вызывает диалог сообщения. Чтобы реализовать кнопку "Отправить", добавьте в представление следующий фрагмент кода:

var button = SendButton()
button.shareContent = content
// Add button to view

Если Messenger не установлен, кнопка "Отправить" будет недоступна. Чтобы проверить, можно ли показать на устройстве кнопку "Отправить", используйте свойство isImplicitlyDisabled объекта SendButton:

Диалог "Поделиться"

Чтобы использовать инструменты Facebook для публикации, определите контент, как описано в разделе, посвященном моделированию контента (см. выше), а затем вызовите диалог "Поделиться". Пример кода для публикации ссылки с помощью диалога "Поделиться":

guard let url = URL(string: "https://developers.facebook.com") else {
    // handle and return
}

let content = ShareLinkContent()
content.contentURL = url

let dialog = ShareDialog(
    viewController: self,
    content: content,
    delegate: self
)
dialog.show()

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

Теперь SDK автоматически проверяет наличие на устройстве нативного приложения Facebook. Если оно отсутствует, SDK переключает пользователя в его браузер по умолчанию и открывает диалоговое окно.

Если оно установлено, вместо переключения в нативное приложение Facebook для iOS отображается интерфейс iOS Share Sheet.

Диалог сообщения

Этот диалог используется для переключения в нативное приложение Messenger для iOS. После публикации пользователь возвращается в ваше приложение.

MessageDialog(content: content, delegate: delegate).show()

Примечание. Диалог сообщения пока не поддерживается на устройствах iPad.

Интеграция с iOS

В iOS имеется нативный интерфейс Share Sheet, с помощью которого на Facebook можно делиться обновлениями статуса, фото, видео и ссылками. Этот интерфейс позволяет настраивать аудиторию публикации и добавлять местоположение. Facebook SDK поддерживает использование нативного элемента управления. Именно этот элемент люди видят в большинстве случаев, когда вы вызываете диалог Facebook "Поделиться".

Использование интерфейса Share Sheet (страницы экспорта) в iOS регулируется правилами для разработчиков, в частности разделом 2.3, который запрещает использовать в приложениях предварительное заполнение полей. Это означает, что в контексте интерфейса Share Sheet приложение не должно предварительно добавлять в поле initialText какой-либо контент, который не вводил пользователь приложения.

Этот API использует тот же блок стилей, что и другие компоненты Facebook SDK. Чтобы показать нативный диалог "Поделиться" в iOS, используйте следующий код:

let dialog = ShareDialog(
    viewController: self,
    content: content,
    delegate: nil
)
dialog.mode = .shareSheet
dialog.show()

Имейте в виду: аргумент viewController обязателен, поскольку он требуется для интерфейса Share Sheet.

Хэштеги

Для фото, ссылки или видео, которыми вы делитесь, можно указать один хэштег. Он также будет отображаться в диалоге "Поделиться". При желании люди могут удалить его перед публикацией.

Ниже показано, как добавить хэштег к ссылке.

let content = ShareLinkContent()
guard let url = URL(string: "https://developers.facebook.com") else { return }

content.contentURL = url
content.hashtag = Hashtag("#MadeWithHackbook")

Дополнительные сведения

С помощью App Links можно создавать обратные ссылки на ваше приложение из публикаций на Facebook, которыми поделились из него.

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

Эмулятор iOS и тестирование

Если вы тестируете приложение с помощью эмулятора, при попытке поделиться видео или будут возникать ошибки. Это связано с тем, что для показа диалога "Поделиться" на устройстве должно быть установлено приложение Facebook для iOS. В эмуляторе такая возможность не поддерживается.

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