ChatGPT解决这个技术问题 Extra ChatGPT

“评价此应用” - 手机上 Google Play 商店应用中的链接

我想在 Android 应用程序中放置一个“评价此应用程序”链接,以便在用户手机上的 Google Play 商店应用程序中打开应用程序列表。

我必须编写什么代码才能在手机上的 Google Play 商店应用程序中创建 market:// 或 http://-link?你把代码放在哪里?有没有人有这个的示例实现?您是否必须指定将放置market:// 或http:// 链接的屏幕,以及哪个最好使用-market:// 或http://?

这有您需要的一切:github.com/delight-im/AppRater您可以查看源代码以了解它是如何完成的。
2020 中查看official way of doing
现在最好的方法是 Google 的应用内评论 - stackoverflow.com/a/65839978/6891563

S
Siarhei

我使用以下代码从我的应用程序打开 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:是使用 resolveActivity 而不是 try..catch

if (sendIntent.resolveActivity(getPackageManager()) != null) {
     startActivity(chooser);
} else {
    openUrl();
}

我在 androidmanifest.xml 中的什么位置放置此代码?我还需要添加什么吗?这与用户按下的屏幕上的实际链接或按钮有何对应关系?谢谢
您无需向清单中添加任何代码。您只需将此代码放在按钮/链接的 OnClickListener 中,这样当单击按钮时,代码就会执行并启动 Play 商店。
此解决方案不计入 Play 市场 backstack。按下返回按钮后,您不会被带回您的应用程序。如果需要,请添加以下行:intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET:此常量在 API 级别 21 中已弃用。从 API 21 开始,它的执行方式与应该使用的 FLAG_ACTIVITY_NEW_DOCUMENT 相同。
如果从非 Activity java 类调用,您需要传递上下文,如 context.startActivity(goToMarket);
L
Luis Lavieri

这是一个有效且最新的代码:)

/*
* 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;
}

将代码放在您要从中调用它的 Activity 中。
当用户单击按钮对应用程序进行评分时,只需调用 rateApp() 函数。


我应该添加什么 NuGet 包,我应该使用什么命名空间 using 才能使 Intent 成为可行的类型?我找到了 Android.Content,但在 Xamarin Forms 中找不到 Intent
C
Cabezas

我总是使用这段代码:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=PackageName")));

总是喜欢一个班轮。:)
我使用它,但它显示此错误-`android.content.ActivityNotFoundException:未找到处理 Intent { act=android.intent.action.VIEW dat=market://details?id=PackageName } 的活动`-我该怎么办?
您可以检查 this 吗?
@Cabezas。一般来说,我想在电话上展示所有现有的市场。单击其中的哪一个,如果我的应用程序存在,市场会显示该应用程序。那我该怎么办?
@Cabezas。我使用此代码:`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"));开始活动(意图); }catch (ActivityNotFoundException e1) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("MARKET URL"))); startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("MARKET URL"))); } 捕捉(ActivityNotFoundException e2){Toast.}`
A
Alexander Nikolenko

Kotlin 解决方案(2020 年 Google 的应用内评论 API):

您现在可以立即使用 Google 提供的应用内评论 API。

首先,在您的 build.gradle(app) 文件中,添加以下依赖项(完整的设置可以在 here 中找到)

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'
    implementation 'com.google.android.play:core-ktx:1.8.1'
}

创建一个方法并将此代码放入其中:

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

Source

https://i.stack.imgur.com/pvqPq.png


如果您使用的是 Kotlin 依赖项,则不需要使用这个:implementation 'com.google.android.play:core:1.8.0'
@dansamosudov 我很高兴它在没有核心库的情况下工作,虽然我没有收到你的赞许:(
小心使用,由于多种原因(例如:旧 Playstore 版本、企业电子邮件、Google Play 服务问题),应用内评论无法始终显示issuetracker.google.com/issues/167352813
如果您希望用户在点击按钮后查看应用程序,您也不应该使用应用程序内评论,它可能每月只显示一次developer.android.com/guide/playcore/in-app-review#quotas
H
Hải Phong

这是如果您在 Google Play 商店和 Amazon Appstore 中发布您的应用程序。我还处理用户(尤其是在中国)没有应用商店和浏览器的情况。

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

不回答手头的问题。
打开应用程序的亚马逊应用商店列表的代码怎么样?
我应该添加什么 NuGet 包,我应该使用什么命名空间 using 才能使 Intent 成为可行的类型?我找到了 Android.Content,但在 Xamarin Forms 中找不到 Intent
K
K_Anas

您始终可以从 PackageManager 类调用 getInstalledPackages() 并检查以确保安装了市场类。您还可以使用 queryIntentActivities() 来确保您构造的 Intent 能够被某些东西处理,即使它不是市场应用程序。这实际上可能是最好的事情,因为它是最灵活和最健壮的。

您可以通过以下方式检查市场应用程序是否存在

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

如果列表至少有一个条目,那么市场就在那里。

您可以使用以下命令在您的应用程序页面上启动 Android Market,它更加自动化:

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

如果你想在你的模拟器上测试这个,你可能没有安装市场:有关更多详细信息,请参阅这些链接:

How To Enable the Android Market in the Google Android Emulator

Installing Google Play on Android Emulator


我在 androidmanifest.xml 中的什么位置放置此代码?我还需要添加什么吗?这与用户按下的屏幕上的实际链接或按钮有何对应关系?谢谢
g
gtgray

我使用这种方法让用户评价我的应用程序:

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

这个是干什么的? - market://details?id= 我的应用链接类似于 https:\\play.google.com\apps\details?id=
@SagarBalyan,这是一个特殊的 uri,用于在 google play 市场应用程序中打开您的应用程序页面。如果您使用您提供的链接开始活动,android 将在默认浏览器中打开您的应用页面,或者让您选择要启动的浏览器应用
K
Keshav Gera

Play 商店评分

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

k
kuzdu

一个科特林版本

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

i
iDecode

Java 解决方案(2020 年 Google 的应用内评论 API):

您现在可以立即使用 Google 提供的应用内评论 API。

首先,在您的 build.gradle(app) 文件中,添加以下依赖项(完整的设置可以在 here 中找到)

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

Source

https://i.stack.imgur.com/nDukv.png


使用实现?是在我们的项目@iDecode 中添加另一个 MB 的额外库 .... Omg
它肯定会增加您的应用程序的大小,但我认为不会以 MB 为单位。这将是几个 KB(虽然我没有检查过)
S
Suman

你可以用这个,它对我有用

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

h
hecht

关于基于 getPackageName() 策略实现的所有答案的一点是,如果您使用相同的代码库构建具有不同应用程序 ID 的多个应用程序(例如,一个白标产品)。


i
iDecode

从现在开始您可以使用 In App Rating feature by Google

Here is Kotlin/Java integration official guide

Google Play 应用内评论 API 可让您提示用户提交 Play 商店评分和评论,而无需离开您的应用或游戏。通常,应用内审核流程(见图 1)可以在应用的整个用户旅程中随时触发。在流程中,用户可以使用 1 到 5 星系统对您的应用程序进行评分并添加可选评论。提交后,评论将发送到 Play 商店并最终显示。

https://i.stack.imgur.com/hjZWC.jpg


G
Garnet Ulrich

另一种可能对您有用的方法是 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());

B
Bruno Bieri

我通过组合 thisthis 答案来使用以下方法,而没有使用基于异常的编程,并且还支持 API 21 之前的意图标志。

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

由于 API 21 不推荐使用意图标志 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET,因此我在 getRateIntent 方法上使用 @SuppressWarnings("deprecation") 标记,因为我的应用目标 SDK 低于 API 21。

我还尝试了他们网站上建议的官方 Google way(2019 年 12 月 6 日)。据我所知,如果未安装 Play Store 应用程序,它无法处理此情况:

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

X
XpressGeek

在您的活动类中声明一个方法。然后复制并粘贴下面的代码。

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

}

现在从代码的任何位置调用此方法。

按照我的实际项目中的下图进行操作。

https://i.stack.imgur.com/dcGfw.jpg


P
Pratik Saluja
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 是 Play 商店中开发者帐户的名称


B
Bruno Bieri

您可以使用这个简单的代码在您的活动中对您的应用进行评分。

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

这个是干什么的? - market://details?id= 我的应用链接类似于 https:\\play.google.com\apps\details?id=
@SagarBalyan 如果用户有多个应用市场,它将打开默认商店或向他们展示每个可用商店的意图。
R
Rafael Lima

自这个答案以来已经过去了很多时间,现在有一种方法可以将 GOOGLE PLAY 审查窗口附加到您的应用程序

https://developer.android.com/guide/playcore/in-app-review

// In your app’s build.gradle file:
...
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.10.0'

    // For Kotlin users also add the Kotlin extensions library for Play Core:
    implementation 'com.google.android.play:core-ktx:1.8.1'
    ...
}

然后每当您想显示费率弹出窗口时

final ReviewManager manager = ReviewManagerFactory.create(context);
final 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(context, reviewInfo);
flow.addOnCompleteListener(task -> {
    // 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, log or handle the error code.
        @ReviewErrorCode int reviewErrorCode = ((TaskException) task.getException()).getErrorCode();
    }
});

正如评论中所说,API 不会让您知道用户给出的评级

此外,谷歌对使用此 api 有严格的指导,允许您显示窗口的频率是有限的,并且您也不允许诱导用户给您一个好评。您可以在上面的链接中查看完整的文档和指南


M
Mahendra Liya

这是我使用 BuildConfig 类的版本:

Intent marketIntent = new Intent(Intent.ACTION_VIEW, uri);

marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    marketIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
}

try {
    startActivity(marketIntent);
} catch (ActivityNotFoundException e) {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + BuildConfig.APPLICATION_ID)));
}

F
Faakhir

In-App Review API 是一项期待已久的功能,Google 已于 2020 年 8 月推出,就像 Apple 在 2016 年为 iOS 应用所做的那样。

使用此 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)