Поділитися "посиланням" програми на Android


105

Я хочу, щоб мій користувач програми міг ділитися / рекомендувати свою програму іншим користувачам. Я використовую намір ACTION_SEND Я додаю звичайний текст, який щось говорить по лінії: встановіть цей класний додаток. Але я не можу знайти спосіб дозволити користувачам безпосередньо перейти на екран встановлення ринку. Все, що я можу надати, - це веб-посилання або текст. Іншими словами, я шукаю дуже прямий спосіб встановити мої програми для користувачів Android.

Дякуємо за будь-яку допомогу / покажчики,

Томас

Відповіді:


267

Це дозволить вам вибрати електронну пошту, WhatsApp або інше.

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
Застосування додатків Firebase. читайте більше про firebase.google.com/docs/invites/android
Вахе-Гарібян

Чому це загорнуте в блок "пробувати / ловити"?
Луї

7
Android любить вносити стільки змін у свої оновлення, що хто знає, чи не вдасться цей код у майбутньому оновлення
Тон

1
@Ton Як я можу надсилати зображення значка програми разом із Темою та текстом.
Арбаз Алам

зробіть це на фоновій нитці, вона якось важка для основної нитки. користувачі не відчують відставання від фонової нитки
blockwala

33

Ви також можете використовувати клас ShareCompat з бібліотеки підтримки.

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


ми могли б також встановити мову? Я знаю, що це було б просто, як додавання &hlтегу до URL, але просто цікаво, якщо він доступний у бібліотеці, як setLang або щось подібне.
киранкінг

3
Будь ласка, завжди використовуйте https замість http у посиланнях.
ubuntudroid

20

Томас,

Ви хочете надати своїм користувачам market://посилання, яке перенесе їх безпосередньо на сторінку деталей вашого додатка. Далі йдеться з developer.android.com:

Завантаження сторінки деталей програми

В Android Market кожен додаток має сторінку деталей, яка забезпечує огляд програми для користувачів. Наприклад, сторінка містить короткий опис програми та знімки екрана, які вони використовуються, якщо вони надаються розробником, а також зворотній зв’язок від користувачів та інформацію про розробника. Сторінка "Подробиці" також містить кнопку "Встановити", яка дозволяє користувачеві запускати завантаження / придбання програми.

Якщо ви хочете направити користувача на певну програму, ваша програма може перенести користувача безпосередньо на сторінку деталей програми. Для цього ваша програма надсилає наміри ACTION_VIEW, що включає параметр URI та запит у такому форматі:

ринок: // деталі? id =

У цьому випадку параметр ім'я пакета - це цілком ім'я пакета цільової програми, як заявлено в атрибуті пакета елемента маніфесту у файлі маніфесту програми. Наприклад:

ринок: // подробиці? id = com.example.android.jetboy

Джерело: http://developer.android.com/guide/publishing/publishing.html


+1 для посилання. Це добре виглядає. Оскільки я хочу, щоб користувач поділився, мені все-таки потрібно використовувати ACTION_SEND та додати посилання на ринок у своєму тексті. Якщо користувач натисне на нього, він повинен перенаправити його на сторінку встановлення. Звучить добре, я мушу спробувати. Дайте мені знати, чи я правильно вас зрозумів.
Томас

Так, ви можете використовувати посилання на ринок у тексті ACTION_SEND, воно працюватиме лише при натисканні на Android-пристрої.
Буде Тейт

1
але це посилання не відкриє посилання на ринок, якщо ми використовуємо ACTION_SEND, посилання залишиться там як простий текст. але посилання було корисним для відкриття ринку З ACTION_VIEW.
varun bhardwaj

13

Назвіть цей метод:

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

Якщо бути точнішим

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

або якщо ви хочете поділитися своїми іншими програмами зі свого розробника. Ви можете зробити щось подібне

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

Щоб автоматично заповнити ім'я та ідентифікатор програми, ви можете використовувати це:

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

Поділіться програмою з назвою - це ви назва_прикладу, вміст - посилання на вашу програму

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

як поділитися значком програми
Джон Дахат

4

Я знаю, що на це питання відповіли, але я хотів би поділитися альтернативним рішенням:

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

нарешті, цей код працює для мене, щоб відкрити клієнт електронної пошти з пристрою Android. спробуйте цей фрагмент.

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

Насправді найкращим способом вирізати додаток між користувачами, Google (firebase) довів нову технологію Firebase Dynamic Link Через декілька рядків ви зможете зробити це документацією https://firebase.google.com/docs/dynamic-links/ та кодом є

  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

Розширення Kotlin для акцій. Ви можете поділитися тим, що захочете, наприклад, посиланням

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

Використання

context.share("Check https://stackoverflow.com")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.