290

「このアプリを評価する」リンクを Android アプリに配置して、ユーザーの携帯電話の Google Play ストア アプリでアプリの一覧を表示したいと考えています。

  1. 電話の Google Play ストア アプリでmarket://or -link を開くには、どのようなコードを作成する必要がありますか?http://
  2. コードはどこに入れますか?
  3. 誰かがこれのサンプル実装を持っていますか?
  4. market://またはhttp://リンクを配置する画面を指定する必要がありますか? また、どちらを使用するのが最適ですmarket://http://?
4

21 に答える 21

591

次のコードを使用して、アプリから Play ストアを開きます。

            val uri: Uri = Uri.parse("market://details?id=$packageName")
            val goToMarket = 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 or
                    Intent.FLAG_ACTIVITY_NEW_DOCUMENT or
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
            try {
                startActivity(goToMarket)
            } catch (e: ActivityNotFoundException) {
                startActivity(Intent(Intent.ACTION_VIEW,
                        Uri.parse("http://play.google.com/store/apps/details?id=$packageName")))
            }

オプション 2: try..catch の代わりに resolveActivity を使用する

if (sendIntent.resolveActivity(getPackageManager()) != null) {
     startActivity(chooser);
} else {
    openUrl();
}
于 2012-05-30T13:01:49.877 に答える
31

私はいつもこのコードを使用します:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=PackageName")));
于 2015-04-26T12:53:21.530 に答える
22

これは、Google Play ストアと Amazon アプリストアの両方でアプリを公開する場合です。また、ユーザー (特に中国) がアプリ ストアとブラウザーの両方を持っていない場合にも対応します。

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();
        }
    }
}
于 2014-08-04T14:30:59.583 に答える
10

PackageManagerクラスからいつでもgetInstalledPackages()を呼び出して、マーケットクラスがインストールされていることを確認できます。また、queryIntentActivities()を使用して、作成したインテントが、マーケットアプリケーションでなくても、何かによって処理できるようにすることもできます。これは、最も柔軟で堅牢であるため、実際に行うのがおそらく最善の方法です。

マーケットアプリがそこにあるかどうかを確認できます

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

リストに少なくとも1つのエントリがある場合、マーケットはそこにあります。

以下を使用して、アプリケーションのページでAndroidマーケットを起動できます。これは、もう少し自動化されています。

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

エミュレータでこれをテストしたい場合は、おそらくマーケットがインストールされていません。詳細については、次のリンクを参照してください。

GoogleAndroidエミュレータでAndroidマーケットを有効にする方法

AndroidエミュレーターへのGooglePlayのインストール

于 2012-05-30T13:09:57.343 に答える
8

このアプローチを使用して、ユーザーにアプリを評価してもらいます。

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();
}
于 2015-07-16T21:52:00.100 に答える
5

Java ソリューション (2020 年に Google によるアプリ内レビュー API):

Google が提供するアプリ内レビュー API をすぐに使用できるようになりました。

まず、build.gradle(app)ファイルに次の依存関係を追加します (完全なセットアップはここにあります) 。

dependencies {
    // This dependency is downloaded from the Google’s Maven repository.
    // So, make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.play:core:1.8.0'
}

このメソッドを に追加しますActivity

void askRatings() {
    ReviewManager manager = ReviewManagerFactory.create(this);
    Task<ReviewInfo> request = manager.requestReviewFlow();
    request.addOnCompleteListener(task -> {
        if (task.isSuccessful()) {
            // We can get the ReviewInfo object
            ReviewInfo reviewInfo = task.getResult();
            Task<Void> flow = manager.launchReviewFlow(this, reviewInfo);
            flow.addOnCompleteListener(task2 -> {
                // The flow has finished. The API does not indicate whether the user
                // reviewed or not, or even whether the review dialog was shown. Thus, no
                // matter the result, we continue our app flow.
            });
        } else {
            // There was some problem, continue regardless of the result.
        }
    });
}

そして、あなたは単にそれを呼び出すことができます

askRatings();

ソース

ここに画像の説明を入力

于 2020-08-13T22:20:50.033 に答える
3

あなたのために働くかもしれない別のアプローチはLinkifyです. ユーザーにアプリの評価を求める TextView がある場合、テキスト内のいくつかの単語をリンクして強調表示し、ユーザーがそれらに触れると Play ストアが開き、レビューの準備が整います。

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());
于 2013-02-20T03:21:40.723 に答える
2

この単純なコードを使用して、アクティビティでアプリを評価できます。

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())));
}
于 2015-11-05T08:34:54.007 に答える
0

In-App Review API は、 Appleが 2016 年に iOS アプリ向けに行ったように、 Googleが 2020 年 8 月に開始した待望の機能です。

この API を使用すると、ユーザーはアプリケーションを離れずにレビューして評価できます。このAPIは、一度にアプリケーションの特定の使用について各ユーザーに割り当てを割り当てるため、ユーザーに常に評価またはレビューを強制しないように開発者に提案します。確かに開発者は、タスクの途中で魅力的なポップアップでユーザーの邪魔をすることはできません。

ジャワ

In Application level (build.gradle)

       dependencies {
            // This dependency from the Google Maven repository.
            // include that repository in your project's build.gradle file.
            implementation 'com.google.android.play:core:1.9.0'
        }

 

boolean isGMSAvailable = false;
int result = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
isGMSAvailable = (com.google.android.gms.common.ConnectionResult.SUCCESS == result);
  if(isGMSAvailable)
  {
    ReviewManager manager = ReviewManagerFactory.create(this);
    Task<ReviewInfo> request = manager.requestReviewFlow();
    request.addOnCompleteListener(task -> {
      try {
        if (task.isSuccessful())
        {
           // getting ReviewInfo object
            ReviewInfo reviewInfo = task.getResult();
            Task<Void> flow = manager.launchReviewFlow(this, reviewInfo);
            flow.addOnCompleteListener(task2 -> {
                // The flow has finished. The API does not indicate whether the user
                // reviewed or not, or even whether the review dialog was shown. Thus,
                // no matter the result, we continue our app flow.
                   });
        } else 
        {
            // There was some problem, continue regardless of the result
           // call old method for rating and user will land in Play Store App page
           Utils.rateOnPlayStore(this);       
        }
        } catch (Exception ex)
        {
            Log.e("review Ex", "review & rate: "+ ex);
                 }
                });
    }
    else
    {
       // if user has not installed Google play services in his/her device you land them to 
       // specific store e.g. Huawei AppGallery or Samsung Galaxy Store 
       Utils.rateOnOtherStore(this);
    }   

コトリン

val manager = ReviewManagerFactory.create(context)
val request = manager.requestReviewFlow()
request.addOnCompleteListener { request ->
    if (request.isSuccessful) {
        // We got the ReviewInfo object
        val reviewInfo = request.result
    } else {
        // There was some problem, continue regardless of the result.
    }
}

//Launch the in-app review flow

val flow = manager.launchReviewFlow(activity, reviewInfo)
flow.addOnCompleteListener { _ ->
    // The flow has finished. The API does not indicate whether the user
    // reviewed or not, or even whether the review dialog was shown. Thus, no
    // matter the result, we continue our app flow.
}

テスト用FakeReviewManager

//java
ReviewManager manager = new FakeReviewManager(this);

//Kotlin
val manager = FakeReviewManager(context)
于 2021-01-05T08:01:16.813 に答える