Udostępnij „link” do aplikacji w systemie Android

105

Chcę, aby użytkownik mojej aplikacji mógł udostępniać / polecać moją aplikację innym użytkownikom. Używam intencji ACTION_SEND. Dodaję zwykły tekst mówiący coś w rodzaju: zainstaluj tę fajną aplikację. Ale nie mogę znaleźć sposobu, aby umożliwić użytkownikom bezpośrednie przejście na przykład do ekranu instalacji na rynku. Wszystko, co mogę im podać, to link do strony internetowej lub jakiś tekst. Innymi słowy, szukam bardzo bezpośredniego sposobu dla użytkowników Androida na zainstalowanie mojej aplikacji.

Dzięki za wszelką pomoc / wskazówki,

Tomasz

Tomasz
źródło

Odpowiedzi:

267

To pozwoli Ci wybrać e-mail, WhatsApp lub cokolwiek innego.

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();
}   
Tona
źródło
1
Aplikacja do udostępniania Firebase. czytaj więcej o firebase.google.com/docs/invites/android
Vahe Gharibyan,
Dlaczego jest to opakowane w blok try / catch?
Louis
7
Android uwielbia wprowadzać tak wiele zmian w swoich aktualizacjach, że kto wie, czy ten kod zawiedzie w przyszłej aktualizacji
Ton
1
@Ton Jak mogę wysłać obraz ikony aplikacji wraz z tematem i tekstem.
Arbaz Alam
zrób to w wątku w tle, jest to jakoś ciężkie dla głównego wątku. użytkownicy nie odczują opóźnienia w wątku w tle
blockwala
33

Możesz również użyć klasy ShareCompat z biblioteki wsparcia.

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
źródło
czy możemy też ustawić język? Wiem, że byłoby to proste, jak dodanie &hltagu do adresu URL, ale jestem po prostu ciekawy, czy jest dostępny w bibliotece, jak setLang czy coś.
kiranking
3
W linkach zawsze używaj protokołu https zamiast http.
ubuntudroid
20

Tomasz,

Chcesz udostępnić użytkownikom market://link, który przeniesie ich bezpośrednio na stronę szczegółów Twojej aplikacji. Poniższy tekst pochodzi z developer.android.com:

Ładowanie strony szczegółów aplikacji

W usłudze Android Market każda aplikacja ma stronę Szczegóły, która zawiera przegląd aplikacji dla użytkowników. Na przykład strona zawiera krótki opis aplikacji i jej zrzuty ekranu, jeśli zostały dostarczone przez programistę, a także opinie użytkowników i informacje o programiście. Strona Szczegóły zawiera również przycisk „Zainstaluj”, który umożliwia użytkownikowi uruchomienie pobrania / zakupu aplikacji.

Jeśli chcesz skierować użytkownika do określonej aplikacji, Twoja aplikacja może przenieść użytkownika bezpośrednio na stronę szczegółów aplikacji. Aby to zrobić, aplikacja wysyła intencję ACTION_VIEW, która zawiera identyfikator URI i parametr zapytania w następującym formacie:

market: // szczegóły? id =

W tym przypadku parametr nazwa_pakietu jest w pełni kwalifikowaną nazwą pakietu aplikacji docelowej, jak zadeklarowano w atrybucie pakietu elementu manifestu w pliku manifestu aplikacji. Na przykład:

market: // szczegóły? id = com.example.android.jetboy

Źródło: http://developer.android.com/guide/publishing/publishing.html

Will Tate
źródło
+1 dla linku. To wygląda dobrze. Ponieważ chcę, aby użytkownik udostępnił, nadal muszę używać ACTION_SEND i dodać link do rynku w moim tekście. Jeśli użytkownik go kliknie, powinien przekierować go na stronę instalacyjną. Brzmi dobrze, muszę spróbować. Daj mi znać, czy dobrze cię zrozumiałem.
Thomas
Tak, możesz użyć linku do rynku w tekście ACTION_SEND, będzie działać tylko wtedy, gdy zostanie kliknięty na urządzeniu z Androidem.
Will Tate
1
ale ten link nie otworzy linku do rynku, jeśli użyjemy ACTION_SEND, link pozostanie tam jako zwykły tekst. ale link był pomocny w otwieraniu rynku Z ACTION_VIEW.
varun bhardwaj
13

Wywołaj tę metodę:

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
źródło
10

Mówiąc dokładniej

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

lub jeśli chcesz udostępnić swoje inne aplikacje od swojego programisty. konto możesz zrobić coś takiego

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
źródło
7

Aby automatycznie wypełnić nazwę aplikacji i identyfikator aplikacji, możesz użyć tego:

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
źródło
5

Udostępnij aplikację z tytułem to nazwa_aplikacji, treść to łącze do aplikacji

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
źródło
jak udostępnić ikonę aplikacji
John dahat
4

Wiem, że udzielono odpowiedzi na to pytanie, ale chciałbym udostępnić alternatywne rozwiązanie:

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
źródło
1

na koniec ten kod działa, aby otworzyć klienta poczty e-mail z urządzenia z systemem Android. wypróbuj ten fragment.

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
źródło
0

Właściwie najlepszy sposób na rozdzielenie aplikacji między użytkownikami, Google (firebase) sprawdził nową technologię Firebase Dynamic Link Za pomocą kilku linii możesz to zrobić, to jest dokumentacja https://firebase.google.com/docs/dynamic-links/ i kod jest

  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
źródło
0

Rozszerzenie Kotlin do akcji udostępniania. Możesz udostępniać, co chcesz, np. Link

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

Stosowanie

context.share("Check https://stackoverflow.com")
tomrozb
źródło