Поділитися "посиланням" програми на 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.