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
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é .....
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):
Définissez OnPublishListener
et appelez:
publish(Feed, OnPublishListener)
sans dialogue.publish(Feed, true, OnPublishListener)
avec dialogue.message
- Le message de l'utilisateurname
- Le nom de la pièce jointe du liencaption
- 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 messageInitialiser 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);
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.
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")); }
À partir de 2017, Facebook ne permet pas le partage d'une image + texte ensemble, directement à partir de votre application.
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:
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);
https://developers.facebook.com/docs/Android/getting-started
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.
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());