Condividi il "collegamento" dell'applicazione in Android


105

Voglio che l'utente della mia applicazione sia in grado di condividere / consigliare la mia app ad altri utenti. Utilizzo l'intento ACTION_SEND. Aggiungo un testo semplice dicendo qualcosa del tipo: installa questa fantastica applicazione. Ma non riesco a trovare un modo per consentire agli utenti di andare direttamente alla schermata di installazione del mercato, ad esempio. Tutto quello che posso fornire loro è un collegamento web o del testo. In altre parole, sto cercando un modo molto diretto per gli utenti Android di installare la mia app.

Grazie per qualsiasi aiuto / suggerimenti,

Tommaso

Risposte:


267

Questo ti permetterà di scegliere tra e-mail, whatsapp o altro.

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

1
Applicazione di condivisione Firebase. leggi di più su firebase.google.com/docs/invites/android
Vahe Gharibyan

Perché è racchiuso in un blocco try / catch?
Louis,

7
Android ama apportare così tante modifiche ai propri aggiornamenti che chissà se questo codice fallirà in un aggiornamento futuro
Ton

1
@Ton Come posso inviare l'immagine dell'icona dell'app insieme all'oggetto e al testo.
Arbaz Alam

fallo sul thread in background, è in qualche modo pesante per il thread principale. gli utenti non sentiranno il ritardo sul thread in background
blockwala

33

È possibile utilizzare anche la classe ShareCompat dalla libreria di supporto.

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


potremmo impostare anche la lingua? So che sarebbe semplice come aggiungere &hltag all'URL ma sono solo curioso di sapere se è disponibile in una libreria come setLang o qualcosa del genere.
kiranking l'

3
Usa sempre https invece di http nei link.
ubuntudroid

20

Tommaso,

Vorresti fornire ai tuoi utenti un file market:// link che li porterà direttamente alla pagina dei dettagli della tua app. Quanto segue è da developer.android.com:

Caricamento della pagina dei dettagli di un'applicazione

In Android Market, ogni applicazione ha una pagina Dettagli che fornisce una panoramica dell'applicazione per gli utenti. Ad esempio, la pagina include una breve descrizione dell'app e schermate della stessa in uso, se fornite dallo sviluppatore, nonché feedback degli utenti e informazioni sullo sviluppatore. La pagina Dettagli include anche un pulsante "Installa" che consente all'utente di attivare il download / acquisto dell'applicazione.

Se desideri indirizzare l'utente a un'applicazione specifica, la tua applicazione può portare l'utente direttamente alla pagina dei dettagli dell'applicazione. A tale scopo, l'applicazione invia un intento ACTION_VIEW che include un URI e un parametro di query in questo formato:

mercato: // dettagli? id =

In questo caso, il parametro packagename è il nome completo del pacchetto dell'applicazione di destinazione, come dichiarato nell'attributo del pacchetto dell'elemento manifest nel file manifest dell'applicazione. Per esempio:

market: // details? id = com.example.android.jetboy

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


+1 per il collegamento. Sembra bello. Poiché desidero che l'utente condivida, devo comunque utilizzare ACTION_SEND e aggiungere il link del mercato nel mio testo. Se l'utente fa clic su di esso, dovrebbe reindirizzarlo alla pagina di installazione. Suona bene, devo provarlo. Fammi sapere se ti ho capito bene.
Thomas,

Sì, puoi utilizzare il link del mercato nel testo di un ACTION_SEND, funzionerà solo se cliccato su un dispositivo Android.
Will Tate

1
ma questo link non aprirà il link del mercato se utilizziamo ACTION_SEND, il link rimarrà lì come un semplice testo. ma il collegamento è stato utile per aprire il mercato CON ACTION_VIEW.
varun bhardwaj

13

Chiama questo metodo:

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

10

Per essere più precisi

   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 se vuoi condividere le tue altre app dal tuo dev. account puoi fare qualcosa di simile

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

7

Per inserire automaticamente il nome e l'ID dell'applicazione puoi usare questo:

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

5

Condividi l'applicazione con il titolo è tu nome_app, il contenuto è il collegamento dell'applicazione

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

come condividere l'icona dell'app
John dahat

4

So che questa domanda ha avuto risposta, ma vorrei condividere una soluzione 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"));

1

infine, questo codice funziona per me per aprire il client di posta elettronica dal dispositivo Android. prova questo snippet.

Intent testIntent = new Intent(Intent.ACTION_VIEW);
                    Uri data = Uri.parse("mailto:?subject=" + "Feedback" + "&body=" + "Write Feedback here....." + "&to=" + "someone@example.com");
                    testIntent.setData(data);
                    startActivity(testIntent);

0

In realtà il modo migliore per dividere la tua app tra gli utenti, google (firebase) ha dimostrato la nuova tecnologia Firebase Dynamic Link Attraverso diverse righe puoi farlo questa è la documentazione https://firebase.google.com/docs/dynamic-links/ e il codice è

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

0

Estensione Kotlin per l'azione di condivisione. Puoi condividere quello che vuoi, ad es. Link

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

Utilizzo

context.share("Check https://stackoverflow.com")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.