Compartilhar "link" do aplicativo no Android

105

Quero que o usuário do meu aplicativo possa compartilhar / recomendar meu aplicativo para outros usuários. Eu uso a intenção ACTION_SEND. Acrescento texto simples dizendo algo como: instale este aplicativo legal. Mas não consigo encontrar uma maneira de permitir que os usuários acessem diretamente a tela de instalação do market place, por exemplo. Tudo que posso fornecer a eles é um link da web ou algum texto. Em outras palavras, estou procurando uma maneira muito direta de os usuários do Android instalarem meu aplicativo.

Obrigado por qualquer ajuda / sugestões,

Thomas

Thomas
fonte

Respostas:

267

Isso permitirá que você escolha entre e-mail, whatsapp ou qualquer outra coisa.

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
fonte
1
Aplicativo de compartilhamento Firebase. leia mais sobre firebase.google.com/docs/invites/android
Vahe Gharibyan
Por que isso está empacotado em um bloco try / catch?
Louis
7
O Android adora fazer tantas mudanças em suas atualizações que quem sabe se esse código falhará em uma atualização futura
Ton
1
@Ton Como posso enviar a imagem do ícone do aplicativo junto com o assunto e o texto.
Arbaz Alam
faça isso no thread de fundo, de alguma forma é pesado para o thread principal. os usuários não sentirão o atraso no thread de segundo plano
blockwala de
33

Você também pode usar a classe ShareCompat da biblioteca de suporte.

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
fonte
poderíamos definir o idioma também? Eu sei que seria simples como adicionar uma &hltag ao url, mas só estou curioso para saber se ele está disponível na biblioteca como setLang ou algo assim.
kiranking de
3
Sempre use https em vez de http nos links.
ubuntudroid
20

Thomas,

Você gostaria de fornecer a seus usuários um market://link que os levará diretamente para a página de detalhes de seu aplicativo. O seguinte é de developer.android.com:

Carregando a página de detalhes de um aplicativo

No Android Market, cada aplicativo possui uma página Detalhes que fornece uma visão geral do aplicativo para os usuários. Por exemplo, a página inclui uma breve descrição do aplicativo e capturas de tela dele em uso, se fornecidas pelo desenvolvedor, bem como feedback dos usuários e informações sobre o desenvolvedor. A página Detalhes também inclui um botão "Instalar" que permite ao usuário acionar o download / compra do aplicativo.

Se você deseja encaminhar o usuário a um aplicativo específico, seu aplicativo pode levar o usuário diretamente à página Detalhes do aplicativo. Para fazer isso, seu aplicativo envia um intent ACTION_VIEW que inclui um URI e um parâmetro de consulta neste formato:

mercado: // detalhes? id =

Nesse caso, o parâmetro packagename é o nome do pacote totalmente qualificado do aplicativo de destino, conforme declarado no atributo package do elemento de manifesto no arquivo de manifesto do aplicativo. Por exemplo:

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

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

Will Tate
fonte
+1 para o link. Isso parece bom. Como desejo que o usuário compartilhe ainda preciso usar o ACTION_SEND e adicionar o link do mercado no meu texto. Se o usuário clicar nele, ele deve redirecioná-lo para a página de instalação. Parece bom, eu tenho que tentar. Deixe-me saber se entendi bem.
Thomas
Sim, você pode usar o link do mercado no texto de um ACTION_SEND, mas ele só funcionará se for clicado em um dispositivo Android.
Will Tate
1
mas este link não abrirá o link do mercado se usarmos ACTION_SEND, o link permanecerá lá como um texto simples. mas o link foi útil para abrir o mercado com ACTION_VIEW.
varun bhardwaj de
13

Chame 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
fonte
10

Para ser mais exato

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

ou se você deseja compartilhar seus outros aplicativos de seu dev. conta você pode fazer algo assim

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
fonte
7

Para preencher automaticamente o nome e a id do aplicativo, você pode usar o seguinte:

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
fonte
5

Compartilhe o aplicativo com o título é seu app_name, o conteúdo é o link do seu aplicativo

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
fonte
como compartilhar o ícone do aplicativo
John dahat
4

Sei que esta pergunta foi respondida, mas gostaria de compartilhar uma solução 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
fonte
1

finalmente, este código é trabalhado para eu abrir o cliente de e-mail do dispositivo Android. tente este trecho.

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
fonte
0

Na verdade, a melhor maneira de dividir seu aplicativo entre usuários, o google (firebase) provou a nova tecnologia Firebase Dynamic Link Por meio de várias linhas, você pode definir esta é a documentação https://firebase.google.com/docs/dynamic-links/ e o código é

  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
fonte
0

Extensão Kotlin para ação de compartilhamento. Você pode compartilhar o que quiser, por exemplo, link

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
fonte