“Nilai Aplikasi Ini” -tautan di aplikasi Google Play store di ponsel

266

Saya ingin memasukkan "Nilai Aplikasi Ini" -tautan di Aplikasi Android untuk membuka daftar aplikasi di aplikasi Google Play Store pengguna di ponsel mereka.

  1. Kode apa yang harus saya tulis untuk membuat tautan market://atau http://buka di aplikasi Google Play store di telepon?
  2. Di mana Anda meletakkan kode?
  3. Apakah ada yang punya contoh implementasi ini?
  4. Apakah Anda harus menentukan layar tempat tautan market://atau http://akan ditempatkan, dan mana yang terbaik untuk digunakan - market://atau http://?
Adreno
sumber
Ini memiliki semua yang Anda butuhkan: github.com/delight-im/AppRater Dan Anda dapat mencari kode sumber untuk memahami bagaimana hal itu dilakukan.
gak

Jawaban:

555

Saya membuka Play Store dari Aplikasi saya dengan kode berikut:

    Uri uri = Uri.parse("market://details?id=" + context.getPackageName());
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    // To count with Play market backstack, After pressing back button, 
    // to taken back to our application, we need to add following flags to intent. 
    goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                    Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    try {
        startActivity(goToMarket);
    } catch (ActivityNotFoundException e) {
        startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName())));
    }

Ini akan meluncurkan Play Store dengan halaman Aplikasi Anda sudah dibuka. Pengguna dapat menilai itu di sana.

miguel.rodelas
sumber
2
Di mana di androidmanifest.xml saya menempatkan kode ini? Apakah saya perlu menambahkan yang lain? Bagaimana hal itu sesuai dengan tautan atau tombol aktual di layar yang ditekan pengguna? Terima kasih
Adreno
1
Anda tidak perlu menambahkan kode apa pun ke manifes. Anda hanya perlu menempatkan kode ini di dalam OnClickListener tombol / tautan Anda, jadi ketika tombol diklik, kode dieksekusi dan Play Store diluncurkan.
miguel.rodelas
61
Solusi ini tidak dihitung dengan backstack Play market. Setelah menekan tombol kembali, Anda tidak dibawa kembali ke aplikasi Anda. Jika Anda menginginkannya, tambahkan baris ini: intent.addFlags (Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
Jan Muller
24
Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET: Konstanta ini tidak digunakan lagi di API level 21. Pada API 21 ini berkinerja sama dengan FLAG_ACTIVITY_NEW_DOCUMENT yang seharusnya digunakan sebagai pengganti ini.
xnagyg
1
Jika menelepon dari kelas java non-Aktivitas, Anda harus meneruskan konteks seperti context.startActivity (goToMarket);
DMur
47

Berikut adalah kode yang berfungsi dan terkini :)

/*
* Start with rating the app
* Determine if the Play Store is installed on the device
*
* */
public void rateApp()
{
    try
    {
        Intent rateIntent = rateIntentForUrl("market://details");
        startActivity(rateIntent);
    }
    catch (ActivityNotFoundException e)
    {
        Intent rateIntent = rateIntentForUrl("https://play.google.com/store/apps/details");
        startActivity(rateIntent);
    }
}

private Intent rateIntentForUrl(String url)
{
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format("%s?id=%s", url, getPackageName())));
    int flags = Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
    if (Build.VERSION.SDK_INT >= 21)
    {
        flags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
    }
    else
    {
        //noinspection deprecation
        flags |= Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET;
    }
    intent.addFlags(flags);
    return intent;
}

Masukkan kode di tempat ActivityAnda ingin menyebutnya.
Ketika pengguna mengklik tombol untuk menilai aplikasi, panggil saja rateApp()fungsinya.

György Benedek
sumber
Apa nuget Paket yang harus saya tambahkan, dan apa yang namespace harus saya usinguntuk Intentmenjadi jenis yang layak? Saya menemukan Android.Isi , tapi saya bingung dengan IntentXamarin Forms.
s3c
24

Saya selalu menggunakan kode ini:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=PackageName")));
Cabezas
sumber
4
Selalu seperti satu liners. :)
androidStud
saya menggunakannya tetapi ini menunjukkan kesalahan ini - `android.content.ActivityNotFoundException: Tidak ditemukan aktivitas untuk menangani Intent {act = android.intent.action.VIEW dat = market: // details? id = PackageName}` - apa yang bisa saya lakukan ?
Mina Dahesh
Dapatkah Anda memeriksa ini ?
Cabezas
@ Cabezas. secara umum saya ingin menunjukkan semua pasar yang ada di ponsel. dengan mengklik yang mana dari mereka, jika aplikasi saya ada, pasar menunjukkan aplikasi. Jadi apa yang harus saya lakukan?
Mina Dahesh
1
@ Cabezas. saya menggunakan kode ini: `try {Intent intent = new Intent (Intent.ACTION_VIEW); intent.setData (Uri.parse ("bazaar: // details? id = vow_note.maxsoft.com.vownote")); intent.setData (Uri.parse ("myket: // comment? id = vow_note.maxsoft.com.vownote")); startActivity (niat); } catch (ActivityNotFoundException e1) {coba {startActivity (Maksud baru (Intent.ACTION_VIEW, Uri.parse ("URL MARKET"))); startActivity (Intent baru (Intent.ACTION_VIEW, Uri.parse ("URL PASAR"))); } catch (ActivityNotFoundException e2) {Toast.} `
Mina Dahesh
18

Ini jika Anda menerbitkan aplikasi di Google Play Store dan Amazon Appstore. Saya juga menangani kasus bahwa pengguna (terutama di China) tidak memiliki toko aplikasi dan browser.

public void goToMyApp(boolean googlePlay) {//true if Google Play, false if Amazone Store
    try {
       startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse((googlePlay ? "market://details?id=" : "amzn://apps/android?p=") +getPackageName())));
    } catch (ActivityNotFoundException e1) {
        try {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse((googlePlay ? "http://play.google.com/store/apps/details?id=" : "http://www.amazon.com/gp/mas/dl/android?p=") +getPackageName())));
        } catch (ActivityNotFoundException e2) {
            Toast.makeText(this, "You don't have any app that can open this link", Toast.LENGTH_SHORT).show();
        }
    }
}
Hải Phong
sumber
Tidak menjawab pertanyaan yang ada.
bagaimana dengan kode untuk membuka daftar toko aplikasi amazon dari aplikasi Anda?
isJulian00
Apa nuget Paket yang harus saya tambahkan, dan apa yang namespace harus saya usinguntuk Intentmenjadi jenis yang layak? Saya menemukan Android.Isi , tapi saya bingung dengan IntentXamarin Forms.
s3c
10

Anda selalu dapat memanggil getInstalledPackages () dari kelas PackageManager dan memeriksa untuk memastikan kelas pasar diinstal. Anda juga dapat menggunakan queryIntentActivities () untuk memastikan bahwa Intent yang Anda buat akan dapat ditangani oleh sesuatu, bahkan jika itu bukan aplikasi pasar. Ini mungkin yang terbaik untuk dilakukan karena ini paling fleksibel dan kuat.

Anda dapat memeriksa apakah aplikasi pasar sudah ada

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://search?q=foo"));
PackageManager pm = getPackageManager();
List<ResolveInfo> list = pm.queryIntentActivities(intent, 0);

Jika daftar memiliki setidaknya satu entri, Pasar ada di sana.

Anda dapat menggunakan yang berikut ini untuk meluncurkan Android Market di halaman aplikasi Anda, ini sedikit lebih otomatis:

Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse("market://details?id=" + getPackageName()));
startActivity(i);

Jika Anda ingin menguji ini pada emulator Anda, Anda mungkin belum menginstal pasarnya: lihat tautan ini untuk detail lebih lanjut:

Cara Mengaktifkan Pasar Android di Google Android Emulator

Menginstal Google Play di Android Emulator

K_Anas
sumber
Di mana di androidmanifest.xml saya menempatkan kode ini? Apakah saya perlu menambahkan yang lain? Bagaimana hal itu sesuai dengan tautan atau tombol aktual di layar yang ditekan pengguna? Terima kasih
Adreno
8

Saya menggunakan pendekatan ini untuk membuat pengguna menilai aplikasi saya:

public static void showRateDialog(final Context context) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context)
            .setTitle("Rate application")
            .setMessage("Please, rate the app at PlayMarket")
            .setPositiveButton("RATE", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (context != null) {
                        String link = "market://details?id=";
                        try {
                            // play market available
                            context.getPackageManager()
                                    .getPackageInfo("com.android.vending", 0);
                        // not available
                        } catch (PackageManager.NameNotFoundException e) {
                            e.printStackTrace();
                            // should use browser
                            link = "https://play.google.com/store/apps/details?id=";
                        }
                        // starts external action
                        context.startActivity(new Intent(Intent.ACTION_VIEW, 
                                Uri.parse(link + context.getPackageName())));
                    }
                }
            })
            .setNegativeButton("CANCEL", null);
    builder.show();
}
gtgray
sumber
Untuk apa ini? - market://details?id=Tautan aplikasi saya sepertihttps:\\play.google.com\apps\details?id=
Sagar Balyan
2
@SagarBalyan, Ini adalah uri khusus untuk membuka halaman aplikasi Anda di aplikasi google play market. Jika Anda memulai aktivitas dengan tautan yang Anda sediakan android akan membuka halaman aplikasi Anda di browser default atau akan memberi Anda pilihan untuk memulai aplikasi browser apa
gtgray
5

Versi kotlin

fun openAppInPlayStore() {
    val uri = Uri.parse("market://details?id=" + context.packageName)
    val goToMarketIntent = Intent(Intent.ACTION_VIEW, uri)

    var flags = Intent.FLAG_ACTIVITY_NO_HISTORY or Intent.FLAG_ACTIVITY_MULTIPLE_TASK
    flags = if (Build.VERSION.SDK_INT >= 21) {
        flags or Intent.FLAG_ACTIVITY_NEW_DOCUMENT
    } else {
        flags or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    goToMarketIntent.addFlags(flags)

    try {
        startActivity(context, goToMarketIntent, null)
    } catch (e: ActivityNotFoundException) {
        val intent = Intent(Intent.ACTION_VIEW,
                Uri.parse("http://play.google.com/store/apps/details?id=" + context.packageName))

        startActivity(context, intent, null)
    }
}
kuzdu
sumber
4

Anda dapat menggunakan ini, ini berfungsi untuk saya

public static void showRateDialogForRate(final Context context) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context)
            .setTitle("Rate application")
            .setMessage("Please, rate the app at PlayMarket")
            .setPositiveButton("RATE", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (context != null) {
                        ////////////////////////////////
                        Uri uri = Uri.parse("market://details?id=" + context.getPackageName());
                        Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
                        // To count with Play market backstack, After pressing back button,
                        // to taken back to our application, we need to add following flags to intent.
                        goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                                Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET |
                                Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
                        try {
                            context.startActivity(goToMarket);
                        } catch (ActivityNotFoundException e) {
                            context.startActivity(new Intent(Intent.ACTION_VIEW,
                                    Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName())));
                        }


                    }
                }
            })
            .setNegativeButton("CANCEL", null);
    builder.show();
}
Suman
sumber
4

Peringkat Play Store

 btn_rate_us.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uri = Uri.parse("market://details?id=" + getPackageName());
                Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
                // To count with Play market backstack, After pressing back button,
                // to taken back to our application, we need to add following flags to intent.
                goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                        Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                        Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
                try {
                    startActivity(goToMarket);
                } catch (ActivityNotFoundException e) {
                    startActivity(new Intent(Intent.ACTION_VIEW,
                            Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
                }
            }
        });
Keshav Gera
sumber
3

Pendekatan lain yang mungkin cocok untuk Anda adalah Linkify. Jika saya memiliki TextView yang meminta pengguna untuk menilai aplikasi, saya dapat menautkan beberapa kata dalam teks sehingga disorot dan ketika pengguna menyentuhnya, play store terbuka, siap untuk ditinjau:

class playTransformFilter implements TransformFilter {
   public String transformUrl(Matcher match, String url) {
        return "market://details?id=com.qwertyasd.yourapp";
   }
}

class playMatchFilter implements MatchFilter {
    public boolean acceptMatch(CharSequence s, int start, int end) {
        return true;
    }
}
text1 = (TextView) findViewById(R.id.text1);
text1.setText("Please rate it.");
final Pattern playMatcher = Pattern.compile("rate it");
Linkify.addLinks(text1, playMatcher, "", 
                   new playMatchFilter(), new playTransformFilter());
Garnet Ulrich
sumber
3

Poin mengenai semua jawaban yang memiliki implementasi berdasarkan pada getPackageName () strategi adalah bahwa menggunakan BuildConfig.APPLICATION_ID mungkin lebih lurus dan berfungsi dengan baik jika Anda menggunakan basis kode yang sama untuk membangun beberapa aplikasi dengan id aplikasi yang berbeda (misalnya, sebuah produk label putih).

hecht
sumber
2
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.support.annotation.StringRes;
import android.widget.Toast;

public class PlayStoreLink {

public void checkForUpdate(Context context, int applicationId) 
{
    try {
        context.startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse(context.getString(R.string.url_market_details)
                        + applicationId)));
    } catch (android.content.ActivityNotFoundException anfe) {
        try {
            context.startActivity(new Intent(Intent.ACTION_VIEW,
                    Uri.parse(context.getString(R.string.url_playstore_app)
                            + applicationId)));
        } catch (Exception e) {
            Toast.makeText(context,
                    R.string.install_google_play_store,
                    Toast.LENGTH_SHORT).show();
        }
    }
}

public void moreApps(Context context, @StringRes int devName) {
    try {
        context.startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse(context.getString(R.string.url_market_search_app)
                        + context.getString(devName))));
    } catch (android.content.ActivityNotFoundException anfe) {
        try {
            context.startActivity(new Intent(Intent.ACTION_VIEW,
                    Uri.parse(context.getString(R.string.url_playstore_search_app)
                            + context.getString(devName))));
        } catch (Exception e) {
            Toast.makeText(context,
                    R.string.install_google_play_store,
                    Toast.LENGTH_SHORT).show();
        }
    }
}

public void rateApp(Context context, int applicationId) {
    try {
        Uri uri = Uri.parse(context.getString(R.string.url_market_details)
                + applicationId);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        int flags = Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH)
            flags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
        else
            flags |= Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET;
        intent.addFlags(flags);
        context.startActivity(intent);
    } catch (ActivityNotFoundException e) {
        checkForUpdate(context, applicationId);
    }
}
}

<string name="install_google_play_store" translatable="false">Please install google play store and then try again.</string>
<string name="url_market_details" translatable="false">market://details?id=</string>
<string name="url_playstore_app" translatable="false">https://play.google.com/store/apps/details?id=</string>
<string name="url_market_search_app" translatable="false">market://search?q=pub:</string>
<string name="url_playstore_search_app" translatable="false">http://play.google.com/store/search?q=pub:</string>
<string name="app_link" translatable="false">https://play.google.com/store/apps/details?id=</string>

devName adalah nama Akun Pengembang di Play Store

Pratik Saluja
sumber
2

Anda dapat menggunakan kode sederhana ini untuk menilai aplikasi Anda dalam aktivitas Anda.

try {
    Uri uri = Uri.parse("market://details?id=" + getPackageName());
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
    startActivity(new Intent(Intent.ACTION_VIEW,
    Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
}
SANJAY GUPTA
sumber
Untuk apa ini? - market://details?id=Tautan aplikasi saya sepertihttps:\\play.google.com\apps\details?id=
Sagar Balyan
@SagarBalyan Jika pengguna memiliki beberapa pasar aplikasi, itu akan membuka toko default atau menunjukkan mereka niat untuk setiap toko yang tersedia.
Avi Parshan
2

Saya menggunakan pendekatan berikut dengan menggabungkan ini dan ini jawaban tanpa menggunakan pemrograman berbasis terkecuali dan juga mendukung pra-API 21 bendera niat.

@SuppressWarnings("deprecation")
private Intent getRateIntent()
{
  String url        = isMarketAppInstalled() ? "market://details" : "https://play.google.com/store/apps/details";
  Intent rateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format("%s?id=%s", url, getPackageName())));
  int intentFlags   = Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
  intentFlags      |= Build.VERSION.SDK_INT >= 21 ? Intent.FLAG_ACTIVITY_NEW_DOCUMENT : Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET;
  rateIntent.addFlags(intentFlags);
  return rateIntent;
}

private boolean isMarketAppInstalled()
{
  Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=anyText"));
  return getPackageManager().queryIntentActivities(marketIntent, 0).size() > 0;
}


// use
startActivity(getRateIntent());

Karena bendera maksud FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETsudah tidak digunakan lagi di API 21, saya menggunakan @SuppressWarnings("deprecation")tag pada metode getRateIntent karena SDK target aplikasi saya di bawah API 21.


Saya juga mencoba cara resmi Google yang disarankan di situs web mereka (6 Desember 2019). Untuk apa yang saya lihat itu tidak menangani kasus ini jika aplikasi Play Store tidak diinstal:

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

Deklarasikan metode di kelas aktivitas Anda. Kemudian salin dan tempel kode di bawah ini.

private void OpenAppInPlayStore(){

    Uri uri = Uri.parse("market://details?id=" + this.getPackageName());
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    // To count with Play market backstack, After pressing back button,
    // to taken back to our application, we need to add following flags to intent.
    goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
            Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
            Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    try {
        startActivity(goToMarket);
    } catch (ActivityNotFoundException e) {
        startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse("http://play.google.com/store/apps/details?id=" + this.getPackageName())));
    }

}

Sekarang panggil metode ini dari mana saja dari kode Anda.

Ikuti gambar di bawah ini dari proyek praktis saya.

masukkan deskripsi gambar di sini

XpressGeek
sumber