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

Tengo una aplicación de Android y admite el envío de texto a través de otras aplicaciones. Por lo tanto, usa el bash ACTION_SEND y el campo EXTRA_TEXT. El selector me presenta todas las aplicaciones que pueden manejar esa intención. Esos son Twitter, EMail, … 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, nada sucede. La página solo 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 través de ACTION_SEND a través de la aplicación Facebook de Android?

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!

Para que el Compartir 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 correcta para compartir, pero cuando haces clic en compartir, no pasa nada (también lo intenté con la aplicación oficial de Twitter, no funciona).

La única forma que encontré para hacer que 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 un 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

06/2013:

  • Este es un error de Facebook, no tu código
  • Facebook NO solucionará este error , dicen que es “por diseño” que rompieron el sistema de intercambio de Android: https://developers.facebook.com/bugs/332619626816423
  • usa el SDK o comparte solo URL
  • Sugerencias: puede hacer trampa un poco usando el título de la página web como texto para la publicación.

En primer lugar, necesita la opción de uso de consulta Intent to handler. A continuación, utilice el nombre del paquete para filtrar el Intento; entonces, ¡tendremos solo una opción de compartir Intent that handler!

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 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; } } 

Bonificación: 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 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 encontrar cómo compartir a través de otra aplicación para compartir, encuéntrala allí . Blog de Tép: acción avanzada a través de Android

Así que tengo un trabajo alternativo, pero asume que tienes el control sobre la página que estás compartiendo …

Si formatea su EXTRA_TEXT como tal …

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

… luego en aplicaciones que no son de Facebook, su texto debería aparecer de la siguiente manera:

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

¡Oye!
Esta es una buena foto!

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

   

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

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

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

El SDK se encuentra en este enlace: http://github.com/facebook/facebook-android-sdk

En ‘uso’, hay esto:

Mostrar un diálogo de Facebook.

El SDK admite varios cuadros de diálogo html de WebView para las interacciones del usuario, como la creación de una publicación en el muro. Esto tiene como objective 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 la pared. El único problema es que es posible que tengan que iniciar sesión primero

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

Parece que es un error en la aplicación de Facebook que se informó en abril de 2011 y aún no ha sido resuelto por los desarrolladores de Facebook de Android.

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

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