web-dev-qa-db-fra.com

Android: Comment partager une image avec du texte sur facebook via intent?

J'aimerais partager une photo avec une légende préremplie de mon application via une intention de partage, sur Facebook.

Exemple de code

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");      

intent.putExtra(Intent.EXTRA_TEXT, "eample");
intent.putExtra(Intent.EXTRA_TITLE, "example");
intent.putExtra(Intent.EXTRA_SUBJECT, "example");
intent.putExtra(Intent.EXTRA_STREAM, imageUri);

Intent openInChooser = new Intent(intent);
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
startActivity(openInChooser);

Voici une capture d'écran de ce que je reçois

Text is not display

Si un type est défini sur image/*, une photo est téléchargée sans le texte prérempli. Si un réglage sur texte/photo simple n'est pas affiché .....

44
Mansi

Les dernières versions de Facebook ne vous permettent pas de partager du texte à l’intention de vos intentions. Vous devez utiliser le SDK de Facebook pour le faire - pour simplifier, utilisez le SDK de Facebook + Android Simple Facebook ( https://github.com/sromku/Android- simple-facebook ). En utilisant la bibliothèque, votre code serait comme ceci (extrait du site Simple Facebook):

Publier le flux

Définissez OnPublishListener et appelez:

  • publish(Feed, OnPublishListener) sans dialogue.
  • publish(Feed, true, OnPublishListener) avec dialogue.

Propriétés de base

  • message - Le message de l'utilisateur
  • name - Le nom de la pièce jointe du lien
  • caption - La légende du lien (apparaît sous le nom du lien)
  • description - La description du lien (apparaît sous la légende du lien)
  • picture - L'URL d'une image jointe à ce message. La photo doit faire au moins 200 pixels sur 200 pixels.
  • link - Le lien joint à ce message

Initialiser l'écouteur de rappel:

OnPublishListener onPublishListener = new OnPublishListener() {
    @Override
        public void onComplete(String postId) {
            Log.i(TAG, "Published successfully. The new post id = " + postId);
        }

     /* 
      * You can override other methods here: 
      * onThinking(), onFail(String reason), onException(Throwable throwable)
      */
};

Construire le flux:

Feed feed = new Feed.Builder()
    .setMessage("Clone it out...")
    .setName("Simple Facebook for Android")
    .setCaption("Code less, do the same.")
    .setDescription("The Simple Facebook library project makes the life much easier by coding less code for being able to login, publish feeds and open graph stories, invite friends and more.")
    .setPicture("https://raw.github.com/sromku/Android-simple-facebook/master/Refs/Android_facebook_sdk_logo.png")
    .setLink("https://github.com/sromku/Android-simple-facebook")
    .build();

Publier le flux sans pour autant dialogue:

mSimpleFacebook.publish(feed, onPublishListener);

Publier le flux avec dialogue:

mSimpleFacebook.publish(feed, true, onPublishListener);


Mise à jour du 14 décembre 2015


selon New Facebook SDK.

facebook-Android-sdk: 4.6.0

C'est très simple.
1. créer un fournisseur dans Android.manifest.xml

<provider
            Android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
            Android:name="com.facebook.FacebookContentProvider"
            Android:exported="true" />

2. Créez votre intention de partage avec des données.

ShareHashtag shareHashTag = new ShareHashtag.Builder().setHashtag("#YOUR_HASHTAG").build();
ShareLinkContent shareLinkContent = new ShareLinkContent.Builder()
                .setShareHashtag(shareHashTag)
                .setQuote("Your Description")
                .setContentUrl(Uri.parse("image or logo [if playstore or app store url then no need of this image url]"))
                .build();


3. Afficher le dialogue de partage

ShareDialog.show(ShowNavigationActivity.this,shareLinkContent);


C'est ça.

45
Eduardo Oliveira

Essayez avec ça

 private void initShareIntent (Type de chaîne, String _text) {
 File filePath = getFileStreamPath ("shareimage.jpg"); // facultatif // stockage interne 
 Intention shareIntent = new Intent (); 
 shareIntent.setAction (Intent.ACTION_SEND); 
 shareIntent.putExtra (Intent.EXTRA_TEXT, _text); 
 shareIntent.putExtra (Intent.EXTRA_STREAM, Uri.fromFile (nouveau fichier (filePath))); // optionnel // utilisez cette option pour envoyer une image 
 shareIntent.setType ("image/jpeg"); 
 shareIntent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION); 
 startActivity (Intent.createChooser (shareIntent, "send")); 
} 
13
Rithchard Javier

À partir de 2017, Facebook ne permet pas le partage d'une image + texte ensemble, directement à partir de votre application.

Workaround

Facebook va cependant gratter une URL pour les données de titre et d'image et l'utiliser dans un post partagé.

En guise de solution de contournement, vous pouvez créer une application à une seule page * qui charge de manière dynamique le texte/l'image que vous souhaitez partager (spécifié dans l'URL) et vous pouvez partager cette URL sur Facebook.

Remarques:

  • Assurez-vous que votre application à une seule page génère une page statique qui porte son titre, des balises méta et des images ouvertes avant la suppression de la page de Facebook. Si ces balises de page Web sont modifiées de manière dynamique via Javascript, facebook ne pourra pas récupérer ces valeurs et les utiliser dans son post de partage.
  • Utilisez les balises de propriétés méta de graphes ouvertes og: image: height et og: image: width à autoriser facebook pour créer un aperçu de l'image dans son post de partage

Pas

0) ajoutez le dernière bibliothèque facebook-sdk à votre fichier build.gradle

compile group: 'com.facebook.Android', name: 'facebook-Android-sdk', version: '4.25.0'

1) Dans votre AndroidManifest.xml, ajoutez une balise meta-data dans votre section <application>:

<application Android:label="@string/app_name" ...>
...
    <meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/facebook_app_id"/>
...
</application>

Ajoutez une chaîne facebook_app_id (avec votre ID APP) à votre fichier strings.xml:

<string name="facebook_app_id">12341234</string>

YOURFBAPPID est votre numéro d'identification d'application Facebook trouvé à l'adresse https://developers.facebook.com/apps/

2) ajoutez également une balise <provider> En dehors de votre balise <application> Dans AndroidManifest.xml

<provider Android:authorities="com.facebook.app.FacebookContentProviderYOURFBAPPID"
          Android:name="com.facebook.FacebookContentProvider"
          Android:exported="true"/>

3) Créez un objet ShareLinkContent en utilisant leur générateur:

ShareLinkContent fbShare = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("http://yourdomain.com/your-title-here/someimagefilename"))
            .build();

4) Partagez-le à partir de votre fragment (ou activité, etc.):

ShareDialog.show(getActivity(), fbShare);

Docs Facebook

https://developers.facebook.com/docs/Android/getting-started

3
Baker

FB ne vous permet plus de pré-remplir le message de partage.

Pour contourner ce problème, vous devrez utiliser un SDK pour publier via une requête Graph. Pour cela, vous aurez besoin du publish_actions autorisation. Depuis le mois dernier, vous devez soumettre votre application à un processus de révision pour avoir accès à publish_actions. Ce qui échouerait si votre application préremplissait les textes de partage. Croyez-moi, j'ai eu la Chutzppah à essayer.

Il semble donc que nous devions nous conformer.

B.t.w. sous iOS, vous pouvez toujours pré-remplir les textes à l'aide du FB sdk. Qui sait pour combien de temps.

2
Vaiden

Dans cette formule, vous pouvez partager des images à la fois avec Messenger et Instagram (com.instagram.Android) sans utiliser de fournisseur dans "AndroidManifest

public void shareMessenger(View v) {
    // showToast("checking");

    File dir = new File(Environment.getExternalStorageDirectory(), "MyFolder");

    File imgFile = new File(dir, "Image.png");

    Intent sendIntent = new Intent(Intent.ACTION_VIEW);
    sendIntent.setType("image/*");
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + imgFile));
    sendIntent.putExtra(Intent.EXTRA_TEXT, "<---MY TEXT--->.");
    sendIntent.setPackage("com.facebook.orca");
    sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    try {
        startActivity(Intent.createChooser(sendIntent, "Share images..."));
    } catch (Android.content.ActivityNotFoundException ex) {
        Toast.makeText(SaveAndShareActivity.this, "Please Install Facebook Messenger", Toast.LENGTH_LONG).show();
    }

}

** Ajoutez ces deux lignes à la méthode onCreate **

 StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
0
DEVSHK