Публикация материалов в 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.

С 18 апреля 2017 г. API Graph версии 2.9 и выше не поддерживает следующие параметры. Версии 2.8 и ниже будут поддерживать эти параметры до 17 июля 2017 г.

  • contentTitle — заголовок материалов в ссылке;
  • imageURL — URL миниатюры для отображения в публикации;
  • contentDescription — описание материалов (обычно 2-4 предложения).

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

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 видео из вашего приложения. Для этого можно использовать диалог «Поделиться» или индивидуально настроенный интерфейс.

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

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

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  NSURL *videoURL = [info objectForKey:UIImagePickerControllerReferenceURL];

  FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
  video.videoURL = videoURL;
  FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
  content.video = video;
  ...
}

Атрибут videoURL URL видео должен являться URL объекта. Чтобы получить URL объекта, можно воспользоваться, например, классом UIImagePickerController.

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

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

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

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

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

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

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

Кнопки

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


Кнопка «Нравится»

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

FBSDKLikeControl *button = [[FBSDKLikeControl alloc] init];
button.objectID = @"https://www.facebook.com/FacebookDevelopers";
[self.view addSubview:button];

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

С помощью этой кнопки люди могут публиковать материалы в своей Хронике в 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 не установлен, эта кнопка будет скрыта. Но это не должно портить внешний вид приложения. Чтобы проверить, можно ли на устройстве показать кнопку «Отправить», используйте свойство FBSDKSendButton кнопки isHidden:

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 версии 6 и более поздней есть нативный интерфейс Share Sheet, с помощью которого можно делиться обновлениями статуса, фото, видео и ссылками на Facebook. Этот интерфейс позволяет выбирать аудитории для публикации и добавления геотегов. Однако интерфейс Share Sheet не поддерживает публикацию новостей Open Graph. Facebook SDK поддерживает использование нативного элемента управления. Начиная с версии Facebook SDK 4.5, именно этот элемент люди видят в большинстве случаев, когда вы вызываете диалог 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, которыми люди поделились из него.

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

Индивидуально настроенный интерфейс

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

Пример вызова API Graph для публикации ссылки на Facebook:

[FBSDKShareAPI shareWithContent:content delegate:nil];

Публикация новостей 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.