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

91

J'ai une application Android et elle prend en charge l'envoi de texte via d'autres applications. Il utilise donc l' ACTION_SENDintention et le EXTRA_TEXTchamp. Le sélecteur me présente toutes les applications capables de gérer une telle intention. Ce sont Twitter, Email, ... et Facebook. Mais lorsque je sélectionne Facebook, il ouvre le navigateur et accède à la page suivante:

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

Il montre 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 n'est peut-être possible d'envoyer des URL que via l'application Facebook. Serait-ce possible?

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

Goddchen
la source
4
Si vous visitez ce message SO et êtes frustré que l'application Facebook ne prend pas correctement en charge ACTION_SEND, veuillez prendre le temps d'ajouter votre message au sujet suivant: forum.developers.facebook.net/viewtopic.php?id=93900
Erreur 454
7
Je suppose que le 21-3-2012 n'est toujours pas résolu? Parce que je ne peux pas le faire fonctionner ..
Diego
1
developer.facebook.com/bugs/332619626816423 - On dirait que l'équipe de conception de Facebook a fermé celui-ci car le pré-remplissage d'un message est contraire à leur politique :(
Brett
1
@Brett C'est vraiment ridicule. Ils veulent juste vous faire ajouter leur SDK à votre projet.
theblang
2
17 mai 2015 - ne fonctionne toujours pas avec Facebook.
Faisal Asif

Réponses:

11

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

ANCIEN: 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 Facebook que Facebook!

Giulio Prisco
la source
Dans la version 1.6.1 de Facebook, cela ne fonctionne pas, et quelques bugs supplémentaires semblent être là lors de l'envoi!
sam
Ça a commencé à marcher! Je ne sais pas quel était le problème. Merci, cela fonctionne aussi avec FB v 1.6.1.
sam
8
Cette réponse est erronée depuis la sortie de la version 1.6.2 de l'application facebook: développeurs.facebook.com
bugs
51

Pour que le partage fonctionne avec l'application Facebook, il vous suffit de fournir 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"));

Cela affichera la fenêtre de partage correcte mais lorsque vous cliquez sur partager, rien ne se passe (j'ai également essayé avec l'application Twitter officielle, cela ne fonctionne pas).

Le seul moyen que j'ai trouvé pour faire fonctionner le partage de l'application Facebook est de ne partager qu'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"));

Il affichera la fenêtre suivante et le bouton Partager fonctionnera:

Partage facebook

Apparemment, il prend automatiquement une image et un 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

ol_v_er
la source
4
Où est le texte "Magnifique moteur de recherche"? C'est le même bug que les gens rapportent ci-dessus, hein?
Kyle Clegg
3
Il dit que vous ne pouvez publier qu'un lien. Pas de texte. Le texte "Magnifique moteur de recherche" a dû être retiré pour que cela fonctionne.
chubbsondubs le
Je donnerai +1 si vous mettez à jour la réponse. À partir de maintenant, l' Facebookapplication tirera correctement le lien d'une chaîne comme Wonderful search engine http://www.google.fr/. Notez que j'ai dit tirer le lien , cela ne fera toujours rien avec le texte. Fonctionne également Twitteravec le texte et le lien.
theblang
45

06/2013:

  • Ceci est un bug de Facebook, pas de votre code
  • Facebook ne corrigera PAS ce bug , ils disent que c'est "par conception" qu'ils ont cassé le système de partage Android: https://developers.facebook.com/bugs/332619626816423
  • utilisez le SDK ou partagez uniquement l'URL.
  • Conseils: vous pouvez tricher un peu en utilisant le titre de la page Web comme texte pour le message.
Loda
la source
28
Merci beaucoup Faceobook. </
sarcasm
Merci @Loda d'avoir attiré notre attention
Jigar
28

Vous avez d'abord besoin de l'option de partage d'intention de requête vers le gestionnaire. Ensuite, utilisez le nom du package pour filtrer l'intention, nous n'aurons alors qu'une seule option de partage d'intention pour le gestionnaire!

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 souhaitez savoir comment partager via une autre application de partage, retrouvez-le là Tép Blog - Advance share via Android

Khaintt
la source
13
En utilisant les moyens que vous ne pouvez toujours pas partager de texte (juste un lien) dans Facebook et Twitter. Vous devez utiliser le SDK Facebook (Twitter) pour Android.
secretlm
Bonjour, j'ai essayé cela, mais cela ne montre pas le message que je veux partager sur facebook ... Une idée pourquoi? Il me demande de me connecter et indique "Qu'est-ce que tu as dans ta tête?" le texte d'indice pas le texte réel que je veux partager
Ramesh Sangili
Cela ne marche pas. Il affiche la même entrée vide qu'avec l'intention normale (dialogue).
Ixx
3
mais sur Twitter, les textes sont facilement publiés
Trikaldarshi
1
Ne fonctionne pas pour Facebook et pour activer le partage sur Twitter, il n'est pas nécessaire de définir le composant d'intention.
Juozas Kontvainis
11

J'ai donc un travail autour, mais cela suppose que vous avez le contrôle sur la page que vous partagez ...

Si vous formatez votre EXTRA_TEXT comme ceci ...

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

... puis sur les applications non Facebook, votre texte devrait ressembler à ceci:

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

Hé!
C'est une belle photo!

Désormais, si vous mettez à jour votre site Web de sorte que les requêtes avec le paramètre de requête extraText renvoient le contenu d'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 échappe cette URL pour générer la boîte de dialogue, il lit les métadonnées du titre et les intègre dans votre boîte de dialogue de partage.

Je me rends compte que c'est une solution plutôt beurk, alors prenez avec un grain de sel ...

Joseph Lee
la source
(plus un) pour la référence xkcd.
Aamir Abro
2

Il semble que l'application Facebook gère cette intention de manière incorrecte. Le moyen le plus fiable semble être d'utiliser l'API Facebook pour Android.

Le SDK est à ce lien: http://github.com/facebook/facebook-android-sdk

Sous «utilisation», il y a ceci:

Affichez une boîte de dialogue Facebook.

Le SDK prend en charge plusieurs boîtes de dialogue html WebView pour les interactions des utilisateurs, telles que la création d'un poteau mural. Ceci est destiné à fournir une fonctionnalité Facebook rapide sans avoir à implémenter une interface utilisateur Android native et à transmettre des données à Facebook directement via les API.

Cela semble être la meilleure façon de le faire - afficher une boîte de dialogue qui s'affichera sur le mur. Le seul problème est qu'ils doivent d'abord se connecter

HXCaïne
la source
Eh bien, ce n'est pas exactement ce que je demandais. Mais de toute façon merci pour l'indice. J'aurais besoin d'ajouter un élément de menu distinct pour le partage Facebook pour que ce travail fonctionne ...
Goddchen
Oui, j'ai compris ce que vous vouliez dire et c'est une salope mais j'ai eu le même problème avec l'intention ACTION_SEND dans mon application et Facebook n'a pas corrigé leur application, donc cela semble être la meilleure alternative
HXCaine
3
Je viens de faire quelques recherches supplémentaires et j'ai constaté qu'il y avait des gens partout sur Internet avec ce problème et que Facebook n'aide pas du tout. forum.developers.facebook.net/viewtopic.php?pid=255227
HXCaine
1
Check this out : By this we can check activity results also....
// Open all sharing option for user
                    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
                    sharingIntent.setType("text/plain");                    
                    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ShortDesc+" from "+BusinessName);
                    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, ShortDesc+" "+ShareURL);
                    sharingIntent.putExtra(Intent.EXTRA_TITLE, ShortDesc+" "+ShareURL);
                    startActivityForResult(Intent.createChooser(sharingIntent, "Share via"),1000);
/**
     * Get the result when we share any data to another activity 
     * */
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
        case 1000:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(getApplicationContext(), "Activity 1 returned NOT OK", Toast.LENGTH_LONG).show();
            break;
        case 1002:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
            break;
        }// end switch



    }// end onActivityResult
Vinod Joshi
la source
1
ShareDialog shareDialog = new ShareDialog(this);
if(ShareDialog.canShow(ShareLinkContent.class)) {

    ShareLinkContent linkContent = new ShareLinkContent.Builder().setContentTitle(strTitle).setContentDescription(strDescription)
                            .setContentUrl(Uri.parse(strNewsHtmlUrl))
                            .build();
    shareDialog.show(linkContent);

}
Ram Bhawan Kushwaha
la source
0

Il semble que ce soit un bogue dans l'application Facebook qui a été signalé en avril 2011 et qui n'a pas encore été corrigé par les développeurs Android de Facebook.

La seule solution pour le moment est d'utiliser leur SDK.

Joseph Woodward
la source
2
Je pense qu'ils veulent que vous utilisiez l'application Web pour partager du contenu partageable avec des amis, afin que vous puissiez voir de Ads ... Je suis avec le même problème et je vais implémenter le partage Facebbok via l'API Facebook.
Igor
0

si vous voulez afficher du texte, mettez # à la mendicité du message que vous voulez, il le partagera en tant que hashtag

MFQ
la source