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

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

Кроме того, материалами из приложения можно поделиться в Facebook Messenger с помощью сторонней платформы Messenger Expression Platform или через диалог сообщения в SDK для iOS.

Messenger SDK для iOSДиалог сообщения

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

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

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

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

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

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

В Facebook SDK версии 4.0 и выше предусмотрены новые модели публикации материалов. Для каждого типа материалов предусмотрен интерфейс, соответствующий <FBSDKSharingContent>. Смоделировав материалы, добавьте в приложение интерфейс их публикации, соответствующий <FBSDKSharing> (например, FBSDKShareDialog).

Когда человек публикует на Facebook ссылку из вашего приложения, в нее добавляется contentURL. Создайте материалы для ссылок с помощью модели FBSDKShareLinkContent. Список всех атрибутов см. в справке по FBSDKShareLinkContent.

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

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];

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

Фото

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

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

Создайте материалы фото для публикации с помощью модели FBSDKSharePhotoContent. Список всех атрибутов см. в справке по FBSDKSharePhotoContent.

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  UIImage *image = info[UIImagePickerControllerOriginalImage];

  FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
  photo.image = image;
  photo.userGenerated = YES;
  FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
  content.photos = @[photo];
  ...
}

Видео

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

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

Создайте материалы видео для публикации с помощью модели FBSDKShareVideoContent. Список всех атрибутов см. в справке по FBSDKShareVideoContent.

 - (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
  if (@available(iOS 11, *)) {
    video.videoAsset = [info objectForKey:UIImagePickerControllerPHAsset];
  } else {
    video.videoURL = [info objectForKey:UIImagePickerControllerReferenceURL];
  }
  FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
  content.video = video;
  ...
}

Мультимедийные материалы

Пользователи вашего приложения могут делиться на Facebook материалами, содержащими фото и видео, с помощью диалога «Поделиться». Имейте в виду:

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

Создайте мультимедийные материалы для публикации с помощью модели FBSDKShareMediaContent. Список всех атрибутов см. в справке по FBSDKShareMediaContent.

FBSDKSharePhoto *photo = [FBSDKSharePhoto photoWith...
FBSDKShareVideo *video = [FBSDKShareVideo videoWith...
FBSDKShareMediaContent *content = [FBSDKShareMediaContent new];
content.media = @[photo, video];
}

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

После создания модели для материалов можно использовать диалог «Поделиться» или диалог сообщения.

Кнопки

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


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

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

FBSDKShareButton *button = [[FBSDKShareButton alloc] init];
button.shareContent = content;  
[self.view addSubview:button];

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

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

FBSDKSendButton *button = [[FBSDKSendButton alloc] init];
button.shareContent = content; 
[self.view addSubview:button];

Если Messenger не установлен, эта кнопка будет скрыта. Помните, что это не должно портить внешний вид приложения. Чтобы проверить, можно ли показать на устройстве кнопку «Отправить», используйте свойство isHidden кнопки FBSDKSendButton:

if (button.isHidden) {
  NSLog(@"Is hidden");
} else {
  [self.view addSubview:button];
}

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

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

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"http://developers.facebook.com"];
[FBSDKShareDialog showFromViewController:self
                              withContent:content
                                 delegate:nil];

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

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

Если нативное приложение Facebook установлено, SDK версий 4.0–4.4 переключает людей в нативное приложение Facebook для iOS, а после публикации возвращает в ваше приложение. Если вы используете SDK версии 4.5 или более поздней, вместо переключения в нативное приложение Facebook для iOS отображается интерфейс Share Sheet iOS. Это не относится к публикуемым новостям Open Graph.

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

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

[FBSDKMessageDialog showWithContent:content delegate:nil];

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

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

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

Использование интерфейса Share Sheet iOS не противоречит Политике Платформы Facebook, в частности требованиям раздела 2.3 в отношении предварительного заполнения в контексте Share Sheet. Это означает, что в контексте интерфейса Share Sheet приложение не должно предварительно включать в поле initialText какие-либо материалы, которые не вводил пользователь приложения.

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

// Example content. Replace with content from your app.
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];

FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = self;
dialog.content = content;
dialog.mode = FBSDKShareDialogModeShareSheet;
[dialog show];

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

Дополнительные функции

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

Хэштеги

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

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

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];
content.hashtag = [FBSDKHashtag hashtagWithString:@"#MadeWithHackbook"];

Публикация цитаты

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

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [@"https://developers.facebook.com/products/sharing"];
content.quote = @"Learn quick and simple ways for people to share content from your app or website to Facebook.";

Дополнительные материалы

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

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

Публикация новостей Open Graph

Новости Open Graph позволяют людям делиться полноценными, структурированными материалами с помощью строго типизированного API, включающего действия и объекты Open Graph.

В таких публикациях содержатся ссылки для возврата в приложение или на его страницу в App Store.

Инструкции по добавлению в приложение индивидуально настраиваемых новостей см. здесь.

Создайте материалы для действий Open Graph с помощью модели FBSDKShareOpenGraphContent. Список всех атрибутов см. в справке по FBSDKShareOpenGraphContent.

NSDictionary *properties = @{
  @"og:type": @"fitness.course",
  @"og:title": @"Sample Course",
  @"og:description": @"This is a sample course.",
  @"fitness:duration:value": @100,
  @"fitness:duration:units": @"s",
  @"fitness:distance:value": @12,
  @"fitness:distance:units": @"km",
  @"fitness:speed:value": @5,
  @"fitness:speed:units": @"m/s",
};
FBSDKShareOpenGraphObject *object = [FBSDKShareOpenGraphObject objectWithProperties:properties];
FBSDKShareOpenGraphAction *action = [[FBSDKShareOpenGraphAction alloc] init];
action.actionType = @"fitness.runs";
[action setObject:object forKey:@"fitness:course"];
FBSDKShareOpenGraphContent *content = [[FBSDKShareOpenGraphContent alloc] init];
content.action = action;
content.previewPropertyName = @"fitness:course";

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

При попытке поделиться видео, фото или новостями Open Graph в симуляторе, с помощью которого вы решили протестировать приложение, будут возникать ошибки. Это связано с тем, что в симуляторе не установлено приложение Facebook для iOS, которое предлагает диалог «Поделиться». В симуляторе такая возможность не поддерживается.

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