Поделиться ссылкой на приложение в 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
Ваге Гарибян,

Почему это заключено в блок try / catch?
Луи

8
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 и параметр запроса в следующем формате:

market: // подробности? id =

В этом случае параметр packagename представляет собой полное имя пакета целевого приложения, как объявлено в атрибуте package элемента manifest в файле манифеста приложения. Например:

market: // подробности? id = com.example.android.jetboy

Источник: http://developer.android.com/guide/publishing/publishing.html.


+1 за ссылку. Выглядит хорошо. Поскольку я хочу, чтобы пользователь поделился, мне все еще нужно использовать ACTION_SEND и добавить ссылку на рынок в свой текст. Если пользователь нажимает на нее, он перенаправляет его на страницу установки. Звучит хорошо, я должен попробовать. Дай мне знать, правильно ли я тебя понял.
Thomas

Да, вы можете использовать ссылку на рынок в тексте ACTION_SEND, но она будет работать только при нажатии на устройстве Android.
Will Tate

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.