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

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

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


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


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

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

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

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

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

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=" + "someone@example.com");
                    testIntent.setData(data);
                    startActivity(testIntent);

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

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")
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.