我如何将视频作为背景和图像共享为Instagram故事?
如果两个内容都是图像,则此文档只有一个解决方案。
https://developers.facebook.com/docs/instagram/sharing-to-stories/
我想发送背景视频和贴纸图片。这可能与Instagram故事有关吗?
我试过了,但不幸的是它不起作用:
// 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
}
最明显的事情是:
intent.setDataAndType(backgroundAssetUri, "*/*");
- 文档说该函数的第二个值可能为null,但我不认为“* / *”是一个有效的mime类型:尝试使用MEDIA_TYPE_VIDEO - Link to Docs intent.setDataAndType(backgroundAssetUri, MEDIA_TYPE_VIDEO);
在API级别11中添加了MEDIA_TYPE_VIDEO
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); }
这是一个错误。
Facebook写道:“他们现在也已经将这些功能添加到Android中,所以你现在应该能够发送贴纸背景了。”
我尝试了与Facebook的官方文档相同的方法,然后在Huawai P9 Lite
(N),Huawai P20 Lite
(O)和Samsung S8
(O)上进行了测试 - 它仅用于Samsung S8
,原因仍然不明。我放弃了尝试,显然,它不适用于大多数手机。
最有趣的是,使用相同的方法共享Feed非常合适:
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);
}