Comparte texto en Facebook desde la aplicación de Android a través de ACTION_SEND

91

Tengo una aplicación para Android y admite el envío de mensajes de texto a través de otras aplicaciones. Por lo tanto, utiliza la ACTION_SENDintención y el EXTRA_TEXTcampo. El que elige me presenta todas las aplicaciones que pueden manejar tal intención. Esos son Twitter, correo electrónico, ... y Facebook. Pero cuando selecciono Facebook, abre el navegador y va a la siguiente página:

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

Muestra mi texto y el botón de enviar. Pero cuando presiono el botón de enviar no pasa nada. La página simplemente se carga de nuevo. Creo que tal vez solo sea posible enviar URL a través de la aplicación de Facebook. ¿Podría ser eso?

¿Alguien logró enviar mensajes de texto a ACTION_SENDtravés de la aplicación de Facebook para Android?

Goddchen
fuente
4
Si visita esta publicación de SO y está frustrado porque la aplicación de Facebook no es compatible con ACTION_SEND, tómese el tiempo para agregar su publicación al siguiente tema: forum.developers.facebook.net/viewtopic.php?id=93900
Error 454
7
Supongo que el 21-3-2012 aún no se ha resuelto. Porque no puedo hacer que funcione ..
Diego
1
developers.facebook.com/bugs/332619626816423 - Parece que el equipo de diseño de Facebook ha cerrado este porque el pre-llenado de un mensaje va en contra de su política :(
Brett
1
@Brett Eso es realmente ridículo. Solo quieren que agregue su SDK a su proyecto.
theblang
2
17 de mayo de 2015: todavía no funciona con Facebook.
Faisal Asif

Respuestas:

11

EDITADO: con el nuevo lanzamiento de la aplicación oficial de Facebook para Android (14 de julio de 2011) ¡¡¡FUNCIONA !!!

ANTIGUO: Los ejemplos anteriores no funcionan si el usuario elige la aplicación de Facebook para compartir, pero funcionan si el usuario elige la aplicación Seesmic para publicar en Facebook. ¡Supongo que Seesmic tiene una mejor implementación de la API de Facebook que Facebook!

Giulio Prisco
fuente
En la versión 1.6.1 de Facebook no funciona, ¡y parece que hay algunos errores adicionales durante el envío!
sábado
¡Empezó a funcionar! No sé cuál fue el problema. Gracias, también funciona con FB v 1.6.1.
sábado
8
Esta respuesta es incorrecta desde el lanzamiento de la versión 1.6.2 de la aplicación de Facebook: developers.facebook.com/bugs/363863587019268
alaeri
51

Para que Share funcione con la aplicación de Facebook, solo necesita tener al menos un enlace:

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

Esto mostrará la ventana para compartir correcta, pero cuando haces clic en compartir, no pasa nada (también probé con la aplicación oficial de Twitter, no funciona).

La única forma que encontré para hacer que el uso compartido de la aplicación de Facebook funcione es compartir solo un enlace sin texto:

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

Mostrará la siguiente ventana y el botón Compartir funcionará:

compartir en FaceBook

Aparentemente, toma automáticamente una imagen y texto del enlace para completar el recurso compartido.

Si desea compartir solo texto, deberá usar la api de Facebook: https://github.com/facebook/facebook-android-sdk

ol_v_er
fuente
4
¿Dónde está el texto "Maravilloso motor de búsqueda"? Ese es el mismo error que la gente informa arriba, ¿no?
Kyle Clegg
3
Dice que solo puedes publicar un enlace. Sin texto. El texto "Maravilloso motor de búsqueda" tuvo que ser eliminado para que funcione.
chubbsondubs
Haré +1 si actualizas la respuesta. A partir de ahora, la Facebookaplicación extraerá correctamente el enlace de una cadena como Wonderful search engine http://www.google.fr/. Tenga en cuenta que dije que tire del enlace , todavía no hará nada con el texto. Además, Twitterfunciona tanto con el texto como con el enlace.
theblang
45

06/2013:

  • Este es un error de Facebook, no su código
  • Facebook NO solucionará este error , dicen que es "por diseño" que rompieron el sistema de uso compartido de Android: https://developers.facebook.com/bugs/332619626816423
  • utilice el SDK o comparta solo la URL.
  • Consejos: podrías hacer un poco de trampa usando el título de la página web como texto para la publicación.
Loda
fuente
28
Muchas gracias Faceobook. </sarcasm>
mr_lou
Gracias @Loda por llamar nuestra atención
Jigar
28

Primero necesita la opción Intención de consulta para compartir controlador. Luego use el nombre del paquete para filtrar Intent, ¡entonces solo tendremos una opción para compartir Intent con el controlador!

Compartir a través de 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;
   }
}

Bono: compartir a través de 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;
   }
}

Y si quieres saber cómo compartir a través de otra aplicación para compartir, encuéntralo allí. Tép Blog - Advance share via Android

Khaintt
fuente
13
Usando las formas en que aún no puede compartir texto (solo enlace) en Facebook y Twitter. Debe utilizar SDK Facebook (Twitter) para Android.
secretlm
Hola, intenté esto, pero no muestra el mensaje de que quiero compartirlo en facebook ... ¿Alguna idea de por qué? Me pide que inicie sesión y muestra "¿Qué tienes en mente?" texto de sugerencia, no el texto real que quiero compartir
Ramesh Sangili
Esto no funciona. Muestra la misma entrada vacía que con la intención normal (diálogo).
Ixx
3
pero en twitter el texto se publica fácilmente
Trikaldarshi
1
No funciona para Facebook y, para habilitar el uso compartido en Twitter, no es necesario configurar el componente de intención.
Juozas Kontvainis
11

Así que tengo una solución, pero asume que tienes control sobre la página que estás compartiendo ...

Si formatea su EXTRA_TEXT así ...

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

... luego, en las aplicaciones que no son de Facebook, su texto debería aparecer así:

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

¡Hola!
¡Esta es una foto genial!

Ahora, si actualiza su sitio web de manera que las solicitudes con el parámetro de consulta extraText devuelvan el contenido de extraText en los metadatos de la página.

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

Luego, cuando Facebook escapa de esa URL para generar el cuadro de diálogo, leerá los metadatos del título y los insertará en su cuadro de diálogo para compartir.

Me doy cuenta de que esta es una solución bastante asquerosa, así que tómela con un grano de sal ...

Joseph Lee
fuente
(más uno) para referencia xkcd.
Aamir Abro
2

Parece que la aplicación de Facebook maneja esta intención de manera incorrecta. La forma más confiable parece ser utilizar la API de Facebook para Android.

El SDK está en este enlace: http://github.com/facebook/facebook-android-sdk

En 'uso', hay esto:

Muestra un diálogo de Facebook.

El SDK admite varios diálogos html de WebView para las interacciones del usuario, como la creación de una publicación en el muro. Esto está destinado a proporcionar una funcionalidad rápida de Facebook sin tener que implementar una interfaz de usuario nativa de Android y pasar datos a Facebook directamente a través de las API.

Esta parece ser la mejor manera de hacerlo: mostrar un cuadro de diálogo que se publicará en el muro. El único problema es que es posible que primero tengan que iniciar sesión

HXCaine
fuente
Bueno, eso no es exactamente lo que estaba pidiendo. Pero de todos modos gracias por la indirecta. Necesitaría agregar un elemento de menú separado para compartir en Facebook para que esto funcione ...
Goddchen
Sí, entendí lo que querías decir y es una perra, pero tuve el mismo problema con la intención ACTION_SEND en mi aplicación y Facebook no ha solucionado su aplicación, por lo que esta parece ser la mejor alternativa
HXCaine
3
Acabo de buscar un poco más y descubrí que hay personas en Internet con este problema y Facebook no está ayudando en absoluto. 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
fuente
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
fuente
0

Parece que es un error en la aplicación de Facebook que se informó en abril de 2011 y aún no lo han solucionado los desarrolladores de Facebook de Android.

La única solución por el momento es usar su SDK.

Joseph Woodward
fuente
2
Creo que quieren que uses la aplicación web para compartir contenido que se pueda compartir con amigos, para que puedas ver los anuncios ... Tengo el mismo problema e implementaré el uso compartido de Facebbok a través de la api de Facebook.
Igor
0

si desea mostrar el texto, ponga # al principio del mensaje que desea, lo compartirá como Hashtag

MFQ
fuente