将视频和贴纸图像分享到Android上的Instagram Story

时间:2018-12-03 15:36:43

标签: android facebook android-intent instagram instagram-api

如何将视频作为背景和图像作为贴纸共享到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上使用,带有图像背景和图像贴纸的文档示例也可以完美运行。但是不能将视频和贴纸放在一起。

它可以在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 :(得分:1)

要立即检查的最明显的事情是:

  1. 您的资产是否符合以下条件:

      

    用于图像资产(JPG,PNG)或视频资产(H.264,H.265,WebM)的Uri。   最小尺寸为720x1280。建议的图像比例为9:16或9:18。   视频可以为1080p,最长可以持续20秒。乌里人需要   成为设备上本地文件的内容Uri。

  2. intent.setDataAndType(backgroundAssetUri, "*/*");-文档说该函数的第二个值可以为null,但是我认为“ * / *”不是有效的mime类型:尝试使用 MEDIA_TYPE_VIDEO -Link to Docs intent.setDataAndType(backgroundAssetUri, MEDIA_TYPE_VIDEO);

  

在API级别11中添加了MEDIA_TYPE_VIDEO

     

公共静态最终int MEDIA_TYPE_VIDEO

     

常数MEDIA_TYPE列,指示该文件是视频   文件。

     

常数:3(0x00000003)

  1. 最后-如示例所示,您是否已测试了开始活动的时间:
    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);
    }

答案 1 :(得分:1)

这是一个错误。

Facebook写道: “他们现在也已将功能添加到Android,因此您现在应该可以发送带有标签的背景。”

答案 2 :(得分:0)

我尝试了与Facebook官方文档相同的方法,然后在Huawai P9 Lite(N),Huawai P20 Lite(O)和Samsung S8(O)上进行了测试-仅在{{1 }}仍然未知的原因。我放弃了尝试,因为显然,它不能在大多数电话上使用。

最有趣的是,使用相同的方法在 feed 上共享就可以了:

Samsung S8