Поделиться видео и наклейкой изображения в Instagram Story на Android - PullRequest
0 голосов
/ 03 декабря 2018

Как я могу поделиться видео в качестве фона и изображение в качестве наклейки вместе с Instagram Story?

В этой документации есть только одно решение, если оба содержимого являются изображениями.

https://developers.facebook.com/docs/instagram/sharing-to-stories/

Я хотел бы отправить фоновое видео вместе с изображением стикера.Возможно ли это с Instagram Story?

Я пробовал это, но, к сожалению, это не сработало:

   // Define image asset URI and attribution link URL
    Uri backgroundAssetUri = Uri.fromFile(new File(backgroundPath));
    Uri stickerAssetUri = Uri.fromFile(new File(stickerPath));

    // Instantiate implicit intent with ADD_TO_STORY action,
    // background asset, and attribution link
    Intent intent = new Intent("com.instagram.share.ADD_TO_STORY");
    intent.setDataAndType(backgroundAssetUri, "*/*");
    intent.putExtra("interactive_asset_uri", stickerAssetUri);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    callbackManager.startActivityForResult(Intent.createChooser(intent, "Share"), NatShareCallbacks.ACTIVITY_SHARE_INSTAGRAM_STORY);

Но пример с двумя изображениями работает без проблем.Я вижу проблему в основном с SetType , потому что это два разных типа контента.

[РЕДАКТИРОВАТЬ]

Одно только видео без наклеек уже работало для меня на Android иПример документации с image-background и image-стикером тоже отлично работает.Но не видео и наклейка вместе.

Работает под iOS без проблем:

NSData *backgroundVideo = [[NSFileManager defaultManager] contentsAtPath:path];

UIImage *appIcon = [UIImage imageNamed: [[[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIcons"] objectForKey:@"CFBundlePrimaryIcon"] objectForKey:@"CFBundleIconFiles"]  objectAtIndex:0]];

// Verify app can open custom URL scheme, open
NSURL *urlScheme = [NSURL URLWithString:@"instagram-stories://share"];
if ([[UIApplication sharedApplication] canOpenURL:urlScheme]) {
    // Assign background image asset and attribution link URL to pasteboard
    //NSArray *pasteboardItems = @[@{@"com.instagram.sharedSticker.backgroundVideo" : backgroundVideo}];
    NSArray *pasteboardItems = @[@{@"com.instagram.sharedSticker.backgroundVideo" : backgroundVideo, @"com.instagram.sharedSticker.stickerImage" : UIImagePNGRepresentation(appIcon)}];
    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 older app versions or app not installed case

}

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Это была ошибка.

Facebook написал: «Теперь они также добавили эту функциональность в Android, поэтому теперь вы можете отправить фон с наклейкой».

0 голосов
/ 28 марта 2019

Я попробовал тот же подход, что и в официальной документации Facebook, затем протестировал на Huawai P9 Lite (N), Huawai P20 Lite (O) и Samsung S8 (O) - он работал только на Samsung S8 по неизвестным пока причинам.Я отказался от попыток, поскольку, очевидно, он не работает на большинстве телефонов.

Самое интересное, что совместное использование на фиде тем же способом работало просто отлично:

Intent intent = new Intent("com.instagram.share.ADD_TO_FEED"); //feed
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(image, "image/jpeg");

Uri image = getImageUri();

Activity activity = getActivity();
if (activity.getPackageManager().resolveActivity(intent, 0) != null) {
    activity.startActivityForResult(intent, 0);
}
0 голосов
/ 11 декабря 2018

Наиболее очевидные вещи, которые нужно проверить сразу:

  1. Соответствует ли ваш актив следующим критериям:

    Uri для актива изображения (JPG, PNG) или видео актив (H.264, H.265, WebM).Минимальные размеры 720х1280.Рекомендуемые пропорции изображения 9:16 или 9:18.Видео может быть 1080p и продолжительностью до 20 секунд.Uri должен быть Uri содержимого для локального файла на устройстве.

  2. intent.setDataAndType(backgroundAssetUri, "*/*"); - документы говорят, что второе значение функции может быть нулевым, однакоЯ не думаю, что "* / *" является допустимым MIME-типом: попробуйте с MEDIA_TYPE_VIDEO - Ссылка на документы intent.setDataAndType(backgroundAssetUri, MEDIA_TYPE_VIDEO);

MEDIA_TYPE_VIDEO добавлено на уровне API 11

public static final int MEDIA_TYPE_VIDEO

Константа для столбца MEDIA_TYPE, указывающая, что файл является видеофайлом.

Константа Значение: 3(0x00000003)

И наконец - проверили ли вы запуск действия, как в примере:
    Activity activity = getActivity();
    activity.grantUriPermission("com.instagram.android", stickerAssetUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
    if (activity.getPackageManager().resolveActivity(intent, 0) != null) {
        activity.startActivityForResult(intent, 0);
    }
...