Публикации в историях

Вы можете интегрировать функцию публикации в свое приложение для Android или iOS, чтобы пользователи могли делиться вашим контентом в историях в Instagram. Информацию о создании приложений см. в руководствах по началу работы с Facebook SDK для Android и iOS.

Чтобы публиковать контент в историях в Instagram, с начала января 2023 г. необходимо предоставлять ID приложения Facebook. Более подробную информацию см. в статье Введение важного обновления для публикаций в историях в Instagram. Если вы не укажете ID приложения, при попытке поделиться контентом в Instagram пользователи получат ошибку "Приложение, из которого вы пытались поделиться историей, сейчас не поддерживает такую функцию". Информацию о получении ID приложения см. в разделах Получение ID приложения (Android) и Получение ID приложения (iOS).

Обзор

С помощью неявных объектов Intent в Android и пользовательских схем URL в iOS можно отправлять фото, видео и стикеры из вашего приложения в приложение Instagram. Приложение Instagram получит этот контент и загрузит его в редактор, чтобы пользователь мог опубликовать его в историях Instagram.

Редактор историй в приложении Instagram содержит фоновый слой и слой стикера.

Фоновый слой

Этот слой позволяет заполнить весь экран фоновым фото, видео, сплошным цветом или градиентом.

Слой стикера

Этот слой может содержать изображение. Пользователь может дополнительно настроить его в редакторе историй.

Разработчикам для Android

В реализациях для Android с целью запуска приложения Instagram и передачи в него контента используются неявные объекты Intent. Обычно процесс публикации выглядит следующим образом:

  1. Создается экземпляр неявного объекта Intent с контентом, который нужно передать в приложение Instagram.
  2. Запускается действие и проверяется возможность разрешения неявного объекта Intent.
  3. Действие разрешается, если это возможно.

Данные

При публикации в истории вы отправляете следующие данные.

КонтентТипОписание

ID приложения Facebook

Строка

ID вашего приложения Facebook.

Фоновый объект

URI

URI объекта изображения (в формате .jpg или .png) или видео (в формате H.264, H.265 или WebM). Минимальное разрешение: 720 x 1 280. Рекомендуемое соотношение сторон изображения: 9:16 или 9:18. Видео может иметь разрешение до 1 080p и длительность до 20 секунд. Необходимо использовать URI локального файла на устройстве. Вы должны отправить фоновый объект, объект стикера или оба этих объекта.

Объект стикера

URI

URI объекта изображения (в формате .jpg или .png). Рекомендуемый размер: 640 x 480. Это изображение накладывается на фон как стикер. Необходимо использовать URI локального файла на устройстве. Вы должны отправить фоновый объект, объект стикера или оба этих объекта.

Верхний цвет фонового слоя

Строка

Строковое шестнадцатеричное значение для цвета, используемое в сочетании со значением нижнего цвета фонового слоя. Если эти значения совпадают, фоновый слой заполняется сплошным цветом. Если они различаются, на их основании генерируется градиент. Если вы указываете фоновый объект, будет использоваться объект, а это значение будет игнорироваться.

Нижний цвет фонового слоя

Строка

Строковое шестнадцатеричное значение для цвета, используемое в сочетании со значением верхнего цвета фонового слоя. Если эти значения совпадают, фоновый слой заполняется сплошным цветом. Если они различаются, на их основании генерируется градиент. Если вы указываете фоновый объект, будет использоваться объект, а это значение будет игнорироваться.

Публикация фонового объекта

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

// Instantiate an intent
Intent intent = new Intent("com.instagram.share.ADD_TO_STORY");

// Attach your App ID to the intent
String sourceApplication = "1234567"; // This is your application's FB ID
intent.putExtra("source_application", sourceApplication);

// Attach your image to the intent from a URI
Uri backgroundAssetUri = Uri.parse("your-image-asset-uri-goes-here");
intent.setDataAndType(backgroundAssetUri, MEDIA_TYPE_JPEG);

// Grant URI permissions for the image
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

// Instantiate an activity
Activity activity = getActivity();

// Verify that the activity resolves the intent and start it
if (activity.getPackageManager().resolveActivity(intent, 0) != null) {
  activity.startActivityForResult(intent, 0);
}  

Публикация объекта стикера

Этот пример отправляет в Instagram объект изображения для слоя стикера и группу цветов фонового слоя. Если не передать цвета фонового слоя, будет использоваться цвет #222222.

// Instantiate an intent
Intent intent = new Intent("com.instagram.share.ADD_TO_STORY");

// Attach your App ID to the intent
String sourceApplication = "1234567"; // This is your application's FB ID
intent.putExtra("source_application", sourceApplication);

// Attach your sticker to the intent from a URI, and set background colors
Uri stickerAssetUri = Uri.parse("your-image-asset-uri-goes-here");
intent.setType(MEDIA_TYPE_JPEG);
intent.putExtra("interactive_asset_uri", stickerAssetUri);
intent.putExtra("top_background_color", "#33FF33");
intent.putExtra("bottom_background_color", "#FF00FF");

// Instantiate an activity
Activity activity = getActivity();

// Grant URI permissions for the sticker
activity.grantUriPermission(
    "com.instagram.android", stickerAssetUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);

// Verify that the activity resolves the intent and start it
if (activity.getPackageManager().resolveActivity(intent, 0) != null) {
  activity.startActivityForResult(intent, 0);
}

Публикация фонового объекта и объекта стикера

Этот пример отправляет в Instagram объект изображения для фонового слоя и объект изображения для слоя стикера.

// Instantiate an intent
Intent intent = new Intent("com.instagram.share.ADD_TO_STORY");

// Attach your App ID to the intent
String sourceApplication = "1234567"; // This is your application's FB ID
intent.putExtra("source_application", sourceApplication);

// Attach your image to the intent from a URI
Uri backgroundAssetUri = Uri.parse("your-background-image-asset-uri-goes-here");
intent.setDataAndType(backgroundAssetUri, MEDIA_TYPE_JPEG);

// Attach your sticker to the intent from a URI
Uri stickerAssetUri = Uri.parse("your-sticker-image-asset-uri-goes-here");
intent.putExtra("interactive_asset_uri", stickerAssetUri);

// Grant URI permissions for the image
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

// Instantiate an activity
Activity activity = getActivity();

// Grant URI permissions for the sticker
activity.grantUriPermission(
    "com.instagram.android", stickerAssetUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);

// Verify that the activity resolves the intent and start it
if (activity.getPackageManager().resolveActivity(intent, 0) != null) {
  activity.startActivityForResult(intent, 0);
}

Разработчикам для iOS

В реализациях для iOS с целью запуска приложения Instagram и передачи в него контента используется пользовательская схема URL. Обычно процесс публикации выглядит следующим образом:

  1. Проверяется возможность разрешения пользовательской схемы URL Instagram приложением.
  2. Назначается контент, который необходимо передать в pasteboard.
  3. Пользовательская схема URL разрешается, если это возможно.

Данные

При публикации в истории вы отправляете следующие данные.

КонтентТипОписание

ID приложения Facebook

NSString *

ID вашего приложения Facebook.

Объект фонового изображения

NSData *

Данные для объекта изображения в поддерживаемом формате (.jpg или .png). Минимальное разрешение: 720x1280. Рекомендуемое соотношение сторон изображения: 9:16 или 9:18. В приложение Instagram необходимо передать фоновый объект (изображение или видео), объект стикера или оба эти объекта.

Объект фонового видео

NSData *

Данные для объекта видео в поддерживаемом формате (H.264, H.265 или WebM). Видео может иметь разрешение до 1080p и длительность до 20 секунд. Рекомендуется размер до 50 МБ. В приложение Instagram необходимо передать фоновый объект (изображение или видео), объект стикера или оба эти объекта.

Объект стикера

NSData *

Данные для объекта изображения в поддерживаемом формате (.jpg или .png). Рекомендуемый размер: 640 x 480. Это изображение накладывается на фон как стикер. В приложение Instagram необходимо передать фоновый объект (изображение или видео), объект стикера или оба эти объекта.

Верхний цвет фонового слоя

NSString *

Строковое шестнадцатеричное значение для цвета, используемое в сочетании со значением нижнего цвета фонового слоя. Если эти значения совпадают, фоновый слой заполняется сплошным цветом. Если они различаются, на их основании генерируется градиент.

Нижний цвет фонового слоя

NSString *

Строковое шестнадцатеричное значение для цвета, используемое в сочетании со значением нижнего цвета фонового слоя. Если эти значения совпадают, фоновый слой заполняется сплошным цветом. Если они различаются, на их основании генерируется градиент.

Регистрация пользовательской схемы URL Instagram

Чтобы ваше приложение могло использовать пользовательскую схему URL Instagram, ее нужно зарегистрировать. Для этого добавьте значение instagram-stories в ключ LSApplicationQueriesSchemes в файле Info.plist приложения.

Публикация фонового объекта

Следующий пример кода отправляет в Instagram объект изображения для фонового слоя, чтобы пользователь мог отредактировать и опубликовать его в историях в Instagram.

- (void)shareBackgroundImage
{
  // Identify your App ID
  NSString *const appIDString = @"1234567890";

  // Call method to share image
  [self backgroundImage:UIImagePNGRepresentation([UIImage imageNamed:@"backgroundImage"]) 
        appID:appIDString];
}


// Method to share image
- (void)backgroundImage:(NSData *)backgroundImage 
        appID:(NSString *)appID
{
  NSURL *urlScheme = [NSURL URLWithString:[NSString stringWithFormat:@"instagram-stories://share?source_application=%@", appID]];

  if ([[UIApplication sharedApplication] canOpenURL:urlScheme])
  {
    // Attach the pasteboard items
    NSArray *pasteboardItems = @[@{@"com.instagram.sharedSticker.backgroundImage" : backgroundImage}];

    // Set pasteboard options
    NSDictionary *pasteboardOptions = @{UIPasteboardOptionExpirationDate : [[NSDate date] dateByAddingTimeInterval:60 * 5]};

    // This call is iOS 10+, can use 'setItems' depending on what versions you support
    [[UIPasteboard generalPasteboard] setItems:pasteboardItems options:pasteboardOptions];
    
    [[UIApplication sharedApplication] openURL:urlScheme options:@{} completionHandler:nil];
  } 
  else
  {
      // Handle error cases
  }
} 

Публикация объекта стикера

В этом примере кода показано, как передать в приложение Instagram объект изображения для слоя стикера и набор цветов для фонового слоя. Если не передать цвета фонового слоя, будет использоваться цвет #222222.

- (void)shareStickerImage
{
  // Identify your App ID
  NSString *const appIDString = @"1234567890";

  // Call method to share sticker
  [self stickerImage:UIImagePNGRepresentation([UIImage imageNamed:@"stickerImage"])
        backgroundTopColor:@"#444444"
        backgroundBottomColor:@"#333333"
        appID:appIDString];
}

// Method to share sticker
- (void)stickerImage:(NSData *)stickerImage 
        backgroundTopColor:(NSString *)backgroundTopColor 
        backgroundBottomColor:(NSString *)backgroundBottomColor
        appID:(NSString *)appID
{
  NSURL *urlScheme = [NSURL URLWithString:[NSString stringWithFormat:@"instagram-stories://share?source_application=%@", appID]];

  if ([[UIApplication sharedApplication] canOpenURL:urlScheme])
  {
    // Attach the pasteboard items
    NSArray *pasteboardItems = @[@{@"com.instagram.sharedSticker.stickerImage" : stickerImage,
                                   @"com.instagram.sharedSticker.backgroundTopColor" : backgroundTopColor,
                                   @"com.instagram.sharedSticker.backgroundBottomColor" : backgroundBottomColor}];

    // Set pasteboard options
    NSDictionary *pasteboardOptions = @{UIPasteboardOptionExpirationDate : [[NSDate date] dateByAddingTimeInterval:60 * 5]};

    // This call is iOS 10+, can use 'setItems' depending on what versions you support
    [[UIPasteboard generalPasteboard] setItems:pasteboardItems options:pasteboardOptions];

    [[UIApplication sharedApplication] openURL:urlScheme options:@{} completionHandler:nil];
  } 
  else
  {
      // Handle error cases
  }
}

Публикация фонового объекта и объекта стикера

В этом примере кода показано, как передать в приложение Instagram объект изображения для фонового слоя и объект изображения для слоя стикера.

- (void)shareBackgroundAndStickerImage
{
  // Identify your App ID
  NSString *const appIDString = @"1234567890";

  // Call method to share image and sticker
  [self backgroundImage:UIImagePNGRepresentation([UIImage imageNamed:@"backgroundImage"])
        stickerImage:UIImagePNGRepresentation([UIImage imageNamed:@"stickerImage"])
        appID:appIDString];
}


// Method to share image and sticker
- (void)backgroundImage:(NSData *)backgroundImage 
        stickerImage:(NSData *)stickerImage 
        appID:(NSString *)appID
{
  NSURL *urlScheme = [NSURL URLWithString:[NSString stringWithFormat:@"instagram-stories://share?source_application=%@", appID]];


  if ([[UIApplication sharedApplication] canOpenURL:urlScheme])
  {
    // Attach the pasteboard items
    NSArray *pasteboardItems = @[@{@"com.instagram.sharedSticker.backgroundImage" : backgroundImage,
                                   @"com.instagram.sharedSticker.stickerImage" : stickerImage}];

    // Set pasteboard options
    NSDictionary *pasteboardOptions = @{UIPasteboardOptionExpirationDate : [[NSDate date] dateByAddingTimeInterval:60 * 5]};

    // This call is iOS 10+, can use 'setItems' depending on what versions you support
    [[UIPasteboard generalPasteboard] setItems:pasteboardItems options:pasteboardOptions];

    [[UIApplication sharedApplication] openURL:urlScheme options:@{} completionHandler:nil];
  }
  else
  {
      // Handle error cases
  }
}

Публикация в историях на Facebook

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