92 votes

Partager un texte sur Facebook à partir de l'application Android via ACTION_SEND

J'ai une application Android et elle prend en charge l'envoi de texte via d'autres applications. Elle utilise donc le ACTION_SEND l'intention et le EXTRA_TEXT champ. Le sélecteur me présente toutes les applications qui peuvent gérer une telle intention. Ce sont Twitter, Email, ... et Facebook. Mais lorsque je sélectionne Facebook, le navigateur s'ouvre et la page suivante s'affiche :

http://m.facebook.com/sharer.php?u=mytext

Il affiche mon texte et le bouton d'envoi. Mais lorsque j'appuie sur le bouton d'envoi, rien ne se passe. La page se charge à nouveau. Je pense qu'il est peut-être possible d'envoyer des URL uniquement via l'application Facebook. Est-ce possible ?

Quelqu'un a-t-il réussi à envoyer un texte via ACTION_SEND via l'application Facebook Android ?

4 votes

Si vous consultez ce message et que vous êtes frustré par le fait que l'application Facebook ne prend pas correctement en charge ACTION_SEND, prenez le temps d'ajouter votre message au sujet suivant : forum.developers.facebook.net/viewtopic.php?id=93900

0 votes

@Error 454:J'ai posté sur facebook mais je suis curieux de savoir comment l'option de partage dans la galerie fonctionne toujours consultez ma question. stackoverflow.com/questions/5692583/

0 votes

Eric Tseng, de Facebook, m'a confirmé aujourd'hui sur Twitter qu'ils cherchent à résoudre ce problème. Espérons que la prochaine version de l'application acceptera correctement le texte partagé.

51voto

ol_v_er Points 8532

Pour que le partage fonctionne avec l'application Facebook, il suffit d'avoir fourni au moins un lien :

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Wonderful search engine http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

La fenêtre de partage s'affiche correctement, mais lorsque vous cliquez sur "Partager", rien ne se passe (j'ai également essayé avec l'application officielle de Twitter, mais cela ne fonctionne pas).

Le seul moyen que j'ai trouvé pour que le partage de l'application Facebook fonctionne est de partager uniquement un lien sans texte :

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

La fenêtre suivante s'affichera et le bouton Partager fonctionnera :

facebook share

Apparemment, il prend automatiquement une image et du texte du lien pour remplir le partage.

Si vous souhaitez partager uniquement du texte, vous devrez utiliser l'api facebook : https://github.com/facebook/facebook-Android-sdk

4 votes

Où est le texte "Merveilleux moteur de recherche" ? C'est le même bug que les gens signalent ci-dessus, non ?

3 votes

Il dit que vous pouvez seulement poster un lien. Pas de texte. Le texte "Merveilleux moteur de recherche" a dû être enlevé pour que ça fonctionne.

0 votes

Je ferai +1 si vous mettez à jour la réponse. A partir de maintenant, le Facebook tirera correctement le lien d'une chaîne telle que Wonderful search engine http://www.google.fr/ . Notez que j'ai dit tirez le lien il ne fera toujours rien avec le texte. Aussi, Twitter fonctionne à la fois avec le texte et le lien.

46voto

Loda Points 1147

06/2013 :

  • Il s'agit d'un bug de Facebook, pas de votre code.
  • Facebook ne va PAS corriger ce bug ils disent c'est "à dessein" qu'ils ont cassé le système de partage d'Android : https://developers.facebook.com/bugs/332619626816423
  • utiliser le SDK ou partager uniquement l'URL.
  • Astuce : vous pouvez tricher un peu en utilisant le titre de la page web comme texte pour le post.

29 votes

Merci beaucoup Faceobook. </sarcasme>

0 votes

Merci @Loda d'avoir attiré notre attention

29voto

khaintt Points 695

Vous devez d'abord interroger l'option de partage de l'intention avec le gestionnaire. Ensuite, utilisez le nom du paquet pour filtrer l'Intent, et nous n'aurons qu'un seul Intent qui gère l'option de partage des gestionnaires !

Partager via Facebook

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ((app.activityInfo.name).contains("facebook")) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

Bonus - Partager via Twitter

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

Et si vous voulez savoir comment partager via une autre application de partage, c'est là que vous le trouverez. Tép Blog - Partage anticipé via Android

14 votes

En utilisant ces moyens, vous ne pouvez toujours pas partager du texte (juste un lien) sur Facebook et Twitter. Vous devez utiliser le SDK Facebook (Twitter) pour Android.

0 votes

Bonjour, j'ai essayé, mais le message indiquant que je veux le partager sur Facebook ne s'est pas affiché... Savez-vous pourquoi ? Il me demande de me connecter et affiche le texte de l'indice "Whats is in your mind ?", mais pas le texte réel que je veux partager.

0 votes

Ça ne marche pas. Il affiche la même entrée vide qu'avec l'intention normale (dialogue).

11voto

Giulio Prisco Points 688

MODIFIÉ : avec la nouvelle version de l'application officielle Facebook pour Android (14 juillet 2011) ÇA MARCHE ! !!

OLD : Les exemples ci-dessus ne fonctionnent pas si l'utilisateur choisit l'application Facebook pour le partage, mais ils fonctionnent si l'utilisateur choisit l'application Seesmic pour publier sur Facebook. Je suppose que Seesmic a une meilleure implémentation de l'API de Facebook que Facebook !

0 votes

Dans la version 1.6.1 de Facebook, cela ne fonctionne pas, et il semble y avoir des bugs supplémentaires lors de l'envoi !

0 votes

Ça a commencé à fonctionner ! Je ne sais pas quel était le problème. Merci, cela fonctionne aussi avec FB v 1.6.1.

9 votes

Cette réponse est fausse depuis la sortie de la version 1.6.2 de l'application Facebook : developers.facebook.com/bugs/363863587019268

11voto

Joseph Lee Points 141

J'ai donc trouvé une solution, mais elle suppose que vous ayez le contrôle de la page que vous partagez...

Si vous formatez votre EXTRA_TEXT comme suit...

String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;

... alors sur les applications non-Facebook, votre texte devrait apparaître comme ceci :

http://www.example.com/myPicPage.html?extraText=

Hé !
C'est une belle photo !

Maintenant, si vous mettez à jour votre site Web de sorte que les requêtes avec le paramètre de requête extraText renvoient le contenu de extraText dans les métadonnées de la page.

<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ -->
<meta name="title" content="Hey! this is a neat pic!">

Ensuite, lorsque Facebook saisit cette URL pour générer la boîte de dialogue, il lit les métadonnées du titre et les intègre à votre boîte de dialogue de partage.

Je réalise que c'est une solution assez dégueulasse, alors prenez-la avec un grain de sel...

0 votes

(plus un) pour la référence xkcd.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X