web-dev-qa-db-fra.com

Partager la vidéo et l'autocollant Image à Instagram Story sur Android

Comment puis-je partager une vidéo en tant qu'arrière-plan et une image en tant qu'autocollant pour Instagram Story? 

Cette documentation n'a qu'une solution si les deux contenus sont des images.

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

Je voudrais envoyer une vidéo de fond avec une image d'autocollant. Est-ce possible avec Instagram Story?

J'ai essayé ça, mais malheureusement ça n'a pas marché:

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

Mais l'exemple avec deux images fonctionne sans problème. Je vois le problème principalement avec SetType, car ce sont deux types de contenu différents.

[MODIFIER]

La vidéo seule sans autocollants fonctionnait déjà pour moi sur Android et l'exemple de la documentation avec image-fond et image-autocollant fonctionne également parfaitement. Mais pas vidéo et autocollant ensemble.

Cela fonctionne sous iOS sans aucun problème:

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

}
7
Oli

C'était un bug. 

Facebook a écrit: .__ "Ils ont ajouté cette fonctionnalité à Android également, vous devriez donc pouvoir envoyer un fond avec un autocollant maintenant."

0
Oli

Les choses les plus évidentes à vérifier tout de suite sont:

  1. Votre atout correspond-il à ces critères:

    Uri sur un fichier image (JPG, PNG) ou un fichier vidéo (H.264, H.265, WebM) . Dimensions minimales 720x1280. Ratios d'images recommandés 9:16 ou 9:18 . Les vidéos peuvent être en 1080p et durer jusqu'à 20 secondes. L'Uri a besoin de être un contenu Uri dans un fichier local sur le périphérique.

  2. intent.setDataAndType(backgroundAssetUri, "*/*"); - la documentation indique que la deuxième valeur de la fonction pourrait être nulle, mais je ne pense pas que "*/*" soit un type mime valide: essayez avec MEDIA_TYPE_VIDEO - Lien vers la documentationintent.setDataAndType(backgroundAssetUri, MEDIA_TYPE_VIDEO);

MEDIA_TYPE_VIDEO ajouté à l'API de niveau 11

public static final int MEDIA_TYPE_VIDEO

Constante pour la colonne MEDIA_TYPE indiquant que le fichier est une vidéo fichier.

Valeur constante: 3 (0x00000003)

  1. Et enfin - avez-vous testé le démarrage de l'activité comme dans l'exemple:
 Activité activité = getActivity (); 
 activity.grantUriPermission ("com.instagram.Android", stickerAssetUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); 
 if (activity.getPackageManager (). resolActivity (intent, 0)! = null) {
 activity.startActivityForResult (intent, 0); 
 } 
1
Stoil Ivanov