Compartir el "enlace" de la aplicación en Android

105

Quiero que el usuario de mi aplicación pueda compartir / recomendar mi aplicación a otros usuarios. Utilizo la intención ACTION_SEND. Agrego texto sin formato diciendo algo como: instala esta aplicación genial. Pero no puedo encontrar una manera de permitir que los usuarios vayan directamente a la pantalla de instalación de Market Place, por ejemplo. Todo lo que puedo proporcionarles es un enlace web o algún texto. En otras palabras, estoy buscando una forma muy directa para que los usuarios de Android tengan mi aplicación instalada.

Gracias por cualquier ayuda / consejos,

Thomas

Thomas
fuente

Respuestas:

267

Esto le permitirá elegir entre correo electrónico, whatsapp o lo que sea.

try { 
    Intent shareIntent = new Intent(Intent.ACTION_SEND);  
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "My application name");
    String shareMessage= "\nLet me recommend you this application\n\n";
    shareMessage = shareMessage + "https://play.google.com/store/apps/details?id=" + BuildConfig.APPLICATION_ID +"\n\n";
    shareIntent.putExtra(Intent.EXTRA_TEXT, shareMessage);  
    startActivity(Intent.createChooser(shareIntent, "choose one"));
} catch(Exception e) { 
    //e.toString();
}   
Tonelada
fuente
1
Aplicación para compartir de Firebase. leer más sobre firebase.google.com/docs/invites/android
Vahe Gharibyan
¿Por qué está envuelto en un bloque try / catch?
Louis
7
Amores Android para hacer tantos cambios en sus actualizaciones que quién sabe si este código se producirá un error en una actualización futura
Ton
1
@Ton ¿Cómo puedo enviar la imagen del icono de la aplicación junto con el Asunto y el texto?
Arbaz Alam
hágalo en el hilo de fondo, de alguna manera es pesado para el hilo principal. los usuarios no sentirán el retraso en el hilo de fondo
blockwala
33

También puede usar la clase ShareCompat de la biblioteca de soporte.

ShareCompat.IntentBuilder.from(activity)
    .setType("text/plain")
    .setChooserTitle("Chooser title")
    .setText("http://play.google.com/store/apps/details?id=" + activity.getPackageName())
    .startChooser();

https://developer.android.com/reference/android/support/v4/app/ShareCompat.html

lukjar
fuente
¿Podríamos configurar el idioma también? Sé que sería simple agregar una &hletiqueta a la URL, pero solo tengo curiosidad por saber si está disponible en una biblioteca como setLang o algo así.
kiranking
3
Utilice siempre https en lugar de http en los enlaces.
ubuntudroid
20

Thomas,

Le conviene proporcionar a sus usuarios un market://enlace que los llevará directamente a la página de detalles de su aplicación. Lo siguiente es de developer.android.com:

Carga de la página de detalles de una aplicación

En Android Market, cada aplicación tiene una página de Detalles que proporciona una descripción general de la aplicación para los usuarios. Por ejemplo, la página incluye una breve descripción de la aplicación y capturas de pantalla de la misma en uso, si las proporciona el desarrollador, así como comentarios de los usuarios e información sobre el desarrollador. La página de Detalles también incluye un botón "Instalar" que permite al usuario activar la descarga / compra de la aplicación.

Si desea remitir al usuario a una aplicación específica, su aplicación puede llevar al usuario directamente a la página de Detalles de la aplicación. Para hacerlo, su aplicación envía un ACTION_VIEW Intent que incluye un URI y un parámetro de consulta en este formato:

mercado: // detalles? id =

En este caso, el parámetro packagename es el nombre de paquete completo de la aplicación de destino, como se declara en el atributo de paquete del elemento de manifiesto en el archivo de manifiesto de la aplicación. Por ejemplo:

mercado: // detalles? id = com.example.android.jetboy

Fuente: http://developer.android.com/guide/publishing/publishing.html

Will Tate
fuente
+1 para el enlace. Eso se ve bien. Como quiero que el usuario comparta, todavía necesito usar ACTION_SEND y agregar el enlace de mercado en mi texto. Si el usuario hace clic en él, debe redirigirlo a la página de instalación. Suena bien, tengo que intentarlo. Déjame saber si te entendí bien.
Thomas
Sí, puede usar el enlace de mercado en el texto de un ACTION_SEND, sin embargo, solo funcionará si se hace clic en él desde un dispositivo Android.
Will Tate
1
pero este enlace no abrirá el enlace del mercado si usamos ACTION_SEND, el enlace permanecerá allí como un texto simple. pero el enlace fue útil para abrir el mercado CON ACTION_VIEW.
varun bhardwaj
13

Llame a este método:

public static void shareApp(Context context)
{
    final String appPackageName = context.getPackageName();
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "Check out the App at: https://play.google.com/store/apps/details?id=" + appPackageName);
    sendIntent.setType("text/plain");
    context.startActivity(sendIntent);
}
Nilesh
fuente
10

Para ser mas exacto

   Intent intent = new Intent(Intent.ACTION_VIEW);
   intent.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.android.example"));
   startActivity(intent);

o si desea compartir sus otras aplicaciones de su dev. cuenta puedes hacer algo como esto

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://play.google.com/store/apps/developer?id=Your_Publisher_Name"));
startActivity(intent);
OWADVL
fuente
7

Para completar automáticamente el nombre de la aplicación y la identificación de la aplicación, puede usar esto:

int applicationNameId = context.getApplicationInfo().labelRes;
final String appPackageName = context.getPackageName();
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_SUBJECT, activity.getString(applicationNameId));
String text = "Install this cool application: ";
String link = "https://play.google.com/store/apps/details?id=" + appPackageName;
i.putExtra(Intent.EXTRA_TEXT, text + " " + link);
startActivity(Intent.createChooser(i, "Share link:"));
Ben Groot
fuente
5

Compartir la aplicación con el título es su nombre de aplicación, el contenido es el enlace de su aplicación

private static void shareApp(Context context) {
    final String appPackageName = BuildConfig.APPLICATION_ID;
    final String appName = context.getString(R.string.app_name);
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    String shareBodyText = "https://play.google.com/store/apps/details?id=" +
            appPackageName;
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, appName);
    shareIntent.putExtra(Intent.EXTRA_TEXT, shareBodyText);
    context.startActivity(Intent.createChooser(shareIntent, context.getString(R.string
            .share_with)));
}
Phan Van Linh
fuente
cómo compartir el icono de la aplicación
John dahat
4

Sé que esta pregunta ha sido respondida, pero me gustaría compartir una solución alternativa:

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
String shareSubText = "WhatsApp - The Great Chat App";
String shareBodyText = "https://play.google.com/store/apps/details?id=com.whatsapp&hl=en";
shareIntent.putExtra(Intent.EXTRA_SUBJECT, shareSubText);
shareIntent.putExtra(Intent.EXTRA_TEXT, shareBodyText);
startActivity(Intent.createChooser(shareIntent, "Share With"));
Amit Mhaske
fuente
1

finalmente, este código me funcionó para abrir el cliente de correo electrónico desde el dispositivo Android. prueba este fragmento.

Intent testIntent = new Intent(Intent.ACTION_VIEW);
                    Uri data = Uri.parse("mailto:?subject=" + "Feedback" + "&body=" + "Write Feedback here....." + "&to=" + "[email protected]");
                    testIntent.setData(data);
                    startActivity(testIntent);
Kishan Vasoya
fuente
0

En realidad, la mejor manera de dividir su aplicación entre usuarios, google (firebase) probó la nueva tecnología Firebase Dynamic Link A través de varias líneas, puede hacer que esta sea la documentación https://firebase.google.com/docs/dynamic-links/ y el código es

  Uri dynamicLinkUri = dynamicLink.getUri();
      Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLink(Uri.parse("https://www.google.jo/"))
            .setDynamicLinkDomain("rw4r7.app.goo.gl")
            .buildShortDynamicLink()
            .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
                @Override
                public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                    if (task.isSuccessful()) {
                        // Short link created
                        Uri shortLink = task.getResult().getShortLink();
                        Uri flowchartLink = task.getResult().getPreviewLink();
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_SEND);
                        intent.putExtra(Intent.EXTRA_TEXT,  shortLink.toString());
                        intent.setType("text/plain");
                        startActivity(intent);
                    } else {
                        // Error
                        // ...
                    }
                }
            });
ahmad
fuente
0

Extensión de Kotlin para compartir acciones. Puedes compartir lo que quieras, por ejemplo, un enlace

fun Context.share(text: String) =
    this.startActivity(Intent().apply {
        action = Intent.ACTION_SEND
        putExtra(Intent.EXTRA_TEXT, text)
        type = "text/plain"
    })

Uso

context.share("Check https://stackoverflow.com")
tomrozb
fuente