web-dev-qa-db-ja.com

ビデオとステッカー画像をInstagramストーリーに共有するAndroid

Instagramストーリーに背景としてのビデオとステッカーとしての画像を一緒に共有するにはどうすればよいですか?

両方のコンテンツが画像である場合、このドキュメントの解決策は1つだけです。

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);

しかし、2つの画像を使用した例は問題なく機能します。これらは2つの異なるコンテンツタイプであるため、主にSetTypeで問題が発生します。

[編集]

ステッカーなしのビデオだけでもAndroidですでに機能しており、image-backgroundとimage-stickerを使用したドキュメントの例も完全に機能します。ただし、ビデオとステッカーを一緒に使用することはできません。

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

}
8
Oli

これはバグでした。

Facebookは次のように書いています。「Androidにも機能が追加されたので、ステッカー付きの背景を送信できるようになりました。」

1
Oli

すぐに確認する最も明白なことは次のとおりです。

  1. あなたの資産はこれらの基準に一致していますか?

    画像アセット(JPG、PNG)またはビデオアセット(H.264、H.265、WebM)へのURI。最小寸法720x1280。推奨される画像の比率は9:16または9:18です。動画の長さは1080pで最大20秒です。 URIは、デバイス上のローカルファイルへのコンテンツURIである必要があります。

  2. intent.setDataAndType(backgroundAssetUri, "*/*");-ドキュメントには、関数の2番目の値がnullになる可能性があると記載されていますが、「*/*」が有効なmimeタイプであるとは思いません:try withMEDIA_TYPE_VIDEO- ドキュメントへのリンクintent.setDataAndType(backgroundAssetUri, MEDIA_TYPE_VIDEO);

APIレベル11で追加されたMEDIA_TYPE_VIDEO

public static final int MEDIA_TYPE_VIDEO

ファイルがビデオファイルであることを示すMEDIA_TYPE列の定数。

定数値:3(0x00000003)

  1. そして最後に-例のようにアクティビティの開始をテストしましたか?
アクティビティアクティビティ= 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
Stoil Ivanov

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);
}
1
zeroDivider