Play Core In-App Review API未显示评论活动

89

我正在尝试使用Google最近发布的评论API(Play Core库1.8.0)。

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

我仔细遵循了故障排除部分的步骤,确保应用程序是从内部测试轨道下载的,我的帐户没有对该应用程序进行过评论,在该用户的库中有该应用程序等等。我甚至尝试了一个全新的帐户,但每次com.google.android.finsky.inappreviewdialog.InAppReviewActivity被显示后立即消失。

我正在从我的活动的onResume()方法调用以下代码:

                reviewManager = ReviewManagerFactory.create(AlarmClock.this);
                Logger.logInfo("Rating: requestReviewFlow() ");
                reviewManager.requestReviewFlow().addOnSuccessListener(new OnSuccessListener<ReviewInfo>() {
                    @Override
                    public void onSuccess(ReviewInfo result) {
                        Logger.logInfo("Rating: launchReviewFlow() ");
                        reviewManager.launchReviewFlow(AlarmClock.this, result).addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void result) {
                                Logger.logInfo("Rating: launchReviewFlow() success ");
                            }
                        });
                    }
                });

两个监听器都返回成功。

以下是日志输出:

2020-08-06 16:01:29.317 29618-29618/? I/MyApp: [06Aug 16:01:29.317, main]: Rating: requestReviewFlow()
2020-08-06 16:01:29.318 29618-29618/? I/PlayCore: UID: [10409]  PID: [29618] ReviewService : requestInAppReview (com.mypackage)
2020-08-06 16:01:29.320 29618-29774/? I/PlayCore: UID: [10409]  PID: [29618] ReviewService : Initiate binding to the service.
2020-08-06 16:01:30.081 29618-29618/? I/PlayCore: UID: [10409]  PID: [29618] ReviewService : ServiceConnectionImpl.onServiceConnected(ComponentInfo{com.android.vending/com.google.android.finsky.inappreviewservice.InAppReviewService})
***2020-08-06 16:01:30.082 29618-29774/? I/PlayCore: UID: [10409]  PID: [29618] ReviewService : linkToDeath***
2020-08-06 16:01:30.355 29618-29637/? I/PlayCore: UID: [10409]  PID: [29618] OnRequestInstallCallback : onGetLaunchReviewFlowInfo
2020-08-06 16:01:30.355 29618-29774/? I/PlayCore: UID: [10409]  PID: [29618] ReviewService : Unbind from service.
2020-08-06 17:02:21.590 7478-7478/? I/MyApp: [06Aug 17:02:21.590, main]: Rating: launchReviewFlow() 
2020-08-06 17:02:21.630 1511-4316/? I/ActivityTaskManager: START u0 {cmp=com.android.vending/com.google.android.finsky.inappreviewdialog.InAppReviewActivity (has extras)} from uid 10122
2020-08-06 17:02:21.750 7478-7478/? I/MyApp: [06Aug 17:02:21.750, main]: Rating: launchReviewFlow() success 

有人成功地使它正常工作了吗? 有什么技巧。 非常感谢!


5
我也遇到了同样的问题,@Petr Nalevka,如果您找到任何解决方案,请在这里分享。 - Dinjit
1
非常感谢,我现在正在尝试使用我的另一个应用程序进行最小实现,并将看到结果。 - Petr Nalevka
1
我看到了相同的问题。Syslog中包含此异常: 在反序列化时未找到类: com.google.android.play.core.review.b(minifyEnabled = false!)。这是Google问题跟踪器的链接:https://issuetracker.google.com/issues/162969017 - mattlaabs
1
我决定不使用那个API。为什么要无缘无故冒险,冒着失去如此宝贵的用户评论的风险呢? - orium
我认为这里有一些混淆:https://dev59.com/I7zpa4cB1Zd3GeqPStnn#63650212 - Phantom Lord
显示剩余7条评论
22个回答

37

好的,我遇到了与OP描述相同的问题,并且在问题跟踪器https://issuetracker.google.com/issues/167352813上也列出了该问题,但GoogleDev尚未解决。

UI显示相同,日志条目也相同(顺便说一下,当它工作时,日志条目也是相同的,包括那个说“ReviewService:linkToDeath”的条目,但我们不必担心这个,对吧?)

然而,你无疑想知道的关键是它能正常工作应用内评论API可以工作!不需要我重复调用评论流程的代码块,它几乎与文档中完全相同,类似于OP列出的内容,以及其他人友好地重复的内容。

花了我一段时间,但我总结如下:

  1. 您的设备需要安装最新的Google Play系统更新

  2. 无论您的应用程序是否已发布在Play商店中,绝对需要通过内部应用程序测试或共享进行测试(我只进行了“内部应用程序测试”,但我认为同样适用)

  3. 要使用Android Studio调试代码,您需要在设备上安装您的内部应用测试版本并至少成功运行一次带有IAT版本的调试器

  4. 一旦您开始运行,当评论对话框弹出时,您必须注意,如果您提交评论,则已使用完所有配额。当您尝试再次启动评论流程时,它看起来像“问题”已经返回。您会获得“成功”的启动,但什么也没有显示。如果您已提交评论(这就是为什么它绝对需要在IAT中的原因),那么它只是一个“私人评论”(不会公开在您的应用程序页面上显示),您需要删除评论以再次显示弹出窗口。

  5. 您可以选择“稍后再说”而不是“提交”,无限次数(好吧,我尝试了大约两打次),每次(重新)调用流程时都会启动弹出对话框。

所以,逐步修复:

  1. 卸载您的应用程序,然后确保您拥有最新的Google Play Store更新。在我的Sony Xperia X1上,这是“设置” ->“关于手机” ->“Android版本” ->“Google Play系统更新”。
  2. 无论以上步骤是否重新启动设备,关闭设备,然后再次打开(不要重启- 关闭 然后 打开,即冷启动)。
  3. 现在进入“设置” ->“应用和通知” ->“Google Play” ->“存储和缓存”,然后执行清除缓存清除存储。(这不应影响任何已安装的应用程序)。
  4. 根据您的应用内评论代码库创建已签名的发布版IAT。即使您已经在生产中发布了版本,也必须这样做。
  5. 现在在您的设备上安装您的IAT发布版 - 如果您从正确的位置下载(即IAT),则应将“(Internal Beta)”或类似的字词附加到您的应用程序名称中(不要运行它,只需安装)。
  6. 在Android Studio中,使用已安装IAT版本的设备清除、重新构建和调试您的应用程序。如果您收到消息“设备已经安装了具有相同包但具有不同签名的应用程序。”请勿点击“确定”以卸载您的IAT版本。按照此处的说明操作:Android: Error-App has same packaged different signature。接受的答案是正确的。如果您必须执行此操作,请注意,您应再次清除和重新构建->调试

希望现在一切都正常了。完成以上步骤后,您实际上可以从设备上“清除”卸载应用程序,并在随后的调试会话中仍然可以使用。

要测试并删除评论,请注意以下内容。提交评论后,您将能够在Google Play控制台中查看它(不在“评论”下,而在“测试反馈”下)。此外,似乎无法在“测试反馈”下删除您的评论。您需要从设备上的IAT下载页面中删除它。在那里,在标题您的私人反馈下,选择您的评论右侧的向右尖角的省略号并简单地“删除”即可。

您的弹出窗口现在将每次显示,直到您提交另一个评论。万岁!


4
我们遇到了相同的问题。然而,使用 @gmail.com 的电子邮件地址对我们起作用,但像许多其他人一样,使用 Gmail 套件电子邮件(例如 me@customgsuitdomain.com)无法正常工作。 - ptoinson
如果用户已经提交了评论并在很长时间后再次触发应用内评论流程,那么该评论会再次出现给用户吗? - Nipul Sindwani
@NipulSindwani。是的。 - Kofi
@LanDenLabs - 如果对话框没有出现,那么你的代码是错误的。 - Kofi
1
如果用户已经通过访问应用商店中的应用页面对应用进行了评分,那么如果我尝试向该特定用户显示“应用内”评论对话框,它会出现吗? - Aman Verma
显示剩余9条评论

24

如果用户已经通过访问应用商店中的应用页面对应用进行了评分,那么如果我尝试向该特定用户显示“应用内”评论对话框,它会出现吗? - Aman Verma

14

我也遇到了同样的问题,我的请求审查流程可以正常工作,然后启动审核流程也可以正常工作,但是没有显示任何内容(我确实注意到屏幕底部中心的小线条会短暂出现,我的音频会在应用程序暂停然后恢复时短暂中断,但没有显示任何审查流程)。

通过向设备添加一个不在我的许可测试者列表(Google开发者控制台)中且以前没有审查过我的应用程序的用户,我成功使其工作。我能够显示评级弹出窗口一次,我取消操作以便再次测试,但之后它就不会再次出现。这似乎是一次性的事情,他们正在积极防止使用评价弹出窗口来打扰用户。

对于我的情况,这个功能似乎并不有用,因为我在设置屏幕上有一个按钮来评价我的应用程序。由于我不知道发生了什么,所以我无法感谢用户,也无法禁用该按钮或显示“您已经评价了此应用程序,谢谢”消息,该按钮只会看起来像一个错误。我想预期的使用方式是在游戏进行中询问用户,如果他们意外地取消对话框,那么对你来说就太糟糕了。

理想情况下,Google应该允许许可测试用户多次显示此弹出窗口以进行测试目的。


5
那么它基本上就是垃圾了!如果它只能显示一次且我们无法根据已经留下评论的情况得到错误信息,那么它就毫无用处。为什么不总是显示它,如果已经留下评论,允许他们进行编辑呢? - Flyview
@Flyview 你知道吗?确切地说! - Niloofar Hakkaki
如果用户已经通过访问应用商店中的应用页面对应用进行了评分,那么如果我尝试向该特定用户显示“应用内”评论对话框,它会出现吗? - Aman Verma

13

我只想分享一个今天(2020年9月3日)可靠运行的代码。它基本上是从官方文档复制而来的。

ReviewManager manager = ReviewManagerFactory.create(activity);
Task<ReviewInfo> request = manager.requestReviewFlow();
request.addOnCompleteListener(task -> {
    try {
        if (task.isSuccessful()) {
            // We can get the ReviewInfo object
            ReviewInfo reviewInfo = task.getResult();
            Task<Void> flow = manager.launchReviewFlow(activity, 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.
                utility.logMessageAsync(activity, "In-app review returned.");
            });
        } else {
            // There was some problem, continue regardless of the result.
            goToAppPage(activity);
        }
    } catch (Exception ex) {
        utility.logExceptionAsync(activity, "Exception from openReview():", ex);
    }
});

它在 Android 10 上进行内部应用程序共享测试,从未出现过无法显示评论对话框的情况。


1
运行良好!我根据Hong的提示在abb的内部应用程序共享中使用它。我测试了Android 7、8、9。 - Joe Okatch
1
在过去的一周半中一直在使用它,并且取得了良好的结果(我确保能得到好评后才展示),但是在最近几天里,数字急剧下降,我没有新的评分,在商店中没有得到评分,尽管用户愿意进行评价,是否有人经历过类似的情况? - Eli Leszczynski
@LanDenLabs 我不知道有任何时间限制。 - Hong
那么,对话框何时出现呢?第一次调用API时出现是愚蠢的,因为用户没有使用应用程序的经验来给出可用的评分。必须有一个期间,在此期间禁止对话框出现,例如1周或1个月。 有没有成功实现此功能的人知道安装应用程序后多久会出现对话框? - LanDenLabs
如果用户已经通过访问应用商店中的应用页面对应用进行了评分,那么如果我尝试向该特定用户显示“应用内”评论对话框,它会出现吗? - Aman Verma
显示剩余5条评论

10

我遇到了同样的问题,按照以下步骤操作后,一切正常工作

  1. 如果您标记了星号并提交,请务必从Play商店中删除您的评论
  2. 清除Play商店的数据。

9

我曾经遇到过同样的问题,并通过以下步骤解决:

  1. 将我的APK文件添加到内部测试渠道
  2. 添加一个测试用户使用Gmail帐户例如:email@gmail.com。 GSuite邮件无法使用
  3. 使用测试邮件,接受测试权限
  4. 使用签署了测试用户电子邮件的物理设备,进入Play商店并下载应用程序

它有效了!!

注意: 如果应用程序尚未发布,则可以使用Google控制台应用共享


2
遇到了同样的问题。花了一些时间才弄清楚 GSuite 帐户不起作用。 - Seagull
有人知道这是为什么吗?我正在构建的应用程序,或者任何应用程序,可能会有使用 GSuite 电子邮件地址的用户。这似乎是应该修复的问题。 - LittleChewbacca

7

尝试将您的应用上传到内部应用共享

我发现,将完全相同的APK上传到内部测试和内部应用共享后,后者在每次测试时都更可靠地显示应用内评论流。

您需要在Play商店中启用内部应用共享,才能通过上传您的apk并提供链接来安装您的应用。

基本上,打开Play商店,进入设置,向下滑动到Play商店版本并点击多次“成为开发人员”,然后启用内部应用共享功能。


1
是的,是的,是的,我尝试了所有的方法,差点放弃了,但是内部应用程序共享起作用了,感谢您的推荐! - ScottFree
1
如果用户已经通过访问应用商店中的应用页面对应用进行了评分,那么如果我尝试向该特定用户显示“应用内”评论对话框,它会出现吗? - Aman Verma

7

对于所有需要可用的JAVA代码的用户,请在下面找到我的代码:

ReviewInfo reviewInfo;
ReviewManager manager;

OnCreate

manager = ReviewManagerFactory.create(this);

private void Review(){
    manager.requestReviewFlow().addOnCompleteListener(new OnCompleteListener<ReviewInfo>() {
        @Override
        public void onComplete(@NonNull Task<ReviewInfo> task) {
            if(task.isSuccessful()){
                reviewInfo = task.getResult();
                manager.launchReviewFlow(MainActivity.this, reviewInfo).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Toast.makeText(MainActivity.this, "Rating Failed", Toast.LENGTH_SHORT).show();
                    }
                }).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Toast.makeText(MainActivity.this, "Review Completed, Thank You!", Toast.LENGTH_SHORT).show();
                    }
                });
            }

        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(Exception e) {
            Toast.makeText(MainActivity.this, "In-App Request Failed", Toast.LENGTH_SHORT).show();
        }
    });
}

请确保以下操作已实施:
implementation 'com.google.android.play:core:1.8.0'

请注意,仅当您的应用在 Google Play 控制台帐户上处于生产、Alpha 或内部测试状态时,对话框才会显示。


谢谢你的代码,但是当我使用它时,它会直接显示“评审完成,谢谢!”而没有其他任何信息。你能告诉我如何确定应用程序是在生产环境、Alpha版还是内部测试中吗?当我进入Play商店时,它会显示“你是这个应用程序的Beta测试人员”。我只是在自己的设备上本地测试应用程序。我需要退出Beta版才能进行测试吗? - Dale
它在生产构建中曾经工作过,但当我删除并尝试再次审查时,它就无法工作了。 - AllwiN
不应使用toast说“谢谢”。根据https://developer.android.com/guide/playcore/in-app-review/kotlin-java,当流程完成时,将触发onComplete。该API不会指示用户是否已经进行了评论,甚至无法确定是否显示了评论对话框。因此,无论结果如何,我们都会继续我们的应用程序流程。 - nichtwer
如果用户已经通过访问应用商店中的应用页面对应用进行了评分,那么如果我尝试向该特定用户显示“应用内”评论对话框,它会出现吗? - Aman Verma

3
在我个人的情况下,如果使用的账户已经留下了评论,这种方法是行不通的。
但是,从Google Play商店删除评论并不能总是奏效。问题依旧存在。
因此,除非你想难过,每次删除留下的评论之后,请清除Play Store应用程序的存储空间。你不需要像其他人建议的那样同时清除缓存(清除存储空间也会执行此操作),但仅清除Play Store应用程序的缓存是不够的。一旦我这样做了,我就可以一遍又一遍地测试这个问题而保证结果的一致性。
祝好运。这真是一团糟。

2
解决了我的测试问题,清除Google Play商店的数据会导致对话框再次出现。 - Yossi

3

我的工作代码:

private fun askForReview() {
    val manager = ReviewManagerFactory.create(this)
    manager.requestReviewFlow().addOnCompleteListener { request ->
        if (request.isSuccessful) {
            val reviewInfo = request.result
            manager.launchReviewFlow(this, reviewInfo).addOnFailureListener {
                logWarning("In-app review request failed, reason=$it")
            }.addOnCompleteListener { _ ->
                logInfo("In-app review finished")
            }
        } else {
            logWarning("In-app review request failed, reason=${request.exception}")
        }
    }
}

这是在内部测试轨迹的应用程序上进行的测试(那里没有配额)。


这段代码在 Live 环境下可以运行,但在 Test 环境下无法运行。 - RKRK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接