播放核心应用内评论API未显示评论活动

时间:2020-08-06 15:08:39

标签: android google-play google-play-core

我正在尝试利用Google昨天发布的Review 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 

有人成功完成了这项工作吗?有小费吗。非常感谢!

18 个答案:

答案 0 :(得分:19)

我已在Google问题跟踪器上提出了与此有关的问题。我也有同样的问题。

有关更多信息,请检查此我的问题跟踪网址:https://issuetracker.google.com/issues/167352813

答案 1 :(得分:11)

我也看到了同样的问题,我的请求审阅流程起作用了,然后启动审阅流程起作用了,但是什么也没显示(我确实注意到屏幕底部中央的小线短暂出现了,音频被切掉了。在应用暂停后短暂恢复,然后又恢复,但未出现任何审核流程。

我可以通过将用户添加到我的许可证测试人员列表(Google开发者控制台)之外的设备中来使其正常工作,而该用户以前没有审核过我的应用程序。我能够显示一次评级弹出窗口,我取消了该操作,以便可以再次对其进行测试,但此后不会再次出现。这似乎是一发不可收拾的事情,他们正积极地防止用户用评论弹出窗口来烦人。

此功能似乎不适用于我的情况,我在设置屏幕上有一个按钮可以为我的应用评分。由于我无法知道发生了什么,所以我无法感谢用户,无法禁用该按钮或显示“您已经对这谢谢表示满意”消息,并且该按钮似乎无能为力,因此看起来一个错误。我想它的预期用途是在玩游戏时问用户,如果他们不小心取消了对话框,那对您来说太糟糕了。

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

答案 2 :(得分:7)

我只想分享今天(2020-09-03)可靠运行的代码。它实际上是从the official document

复制而来
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上与内部应用程序共享进行了测试。它从未失败过显示审阅对话框。

答案 3 :(得分:4)

尝试将您的应用上传到Internal App Sharing

我发现,将相同的apk上传到内部测试与内部应用程序共享相比,后者在每次尝试测试时都更可靠地显示应用程序内审阅流。

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

基本上转到Play商店,转到“设置”,向下滚动到Play商店版本,然后点按几次以“成为开发者”,然后启用内部应用共享。

答案 4 :(得分:3)

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

  1. 将我的APK文件添加到内部测试频道
  2. 使用Gmail帐户添加测试者用户 ,例如: email@gmail.com 。 GSuite邮件不起作用
  3. 使用测试人员邮件,接受测试人员特权
  4. 使用通过测试仪用户电子邮件签名的物理设备,转到Play商店并下载该应用程序

有效!

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

答案 5 :(得分:2)

对于需要有效的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测试或内部测试时,才会显示该对话框。

答案 6 :(得分:1)

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

相同的UI表现形式,相同的日志条目(尽管,日志条目在工作时仍是相同的,并附有“ ReviewService:linkToDeath”条目,但我们不用担心那件事吗?)

为避免过多的悬念,您毫无疑问想知道,关键是 IT工作应用内评论API可以正常工作!无需我重复用于调用评论流程的代码块,它与文档中的代码几乎完全相同,类似于OP列出的内容,还有其他几个人已经重复了。

花了我一段时间,但简而言之,我的理解如下:

  1. 您的设备需要具有最新的Google Play系统更新

  2. 无论您的应用程序是在Play商店上发布的,还是您绝对需要通过内部应用程序测试或共享进行测试(我只做过“内部应用程序测试”,但我希望同样适用)

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

  4. 一旦启动并运行,当弹出审阅对话框时,您需要注意的是,如果提交审阅,则您已经使用了所有配额。当您尝试重新启动审阅流程时,似乎“问题”已返回。您获得了“成功”启动,但没有任何显示。如果您已提交评论(这就是为什么它绝对需要包含在IAT中的原因),那么它只是一个“私人评论”(未在您的应用程序页面上公开显示),并且您需要删除评论至再次显示弹出窗口。

  5. 您可以选择“不立即”而不是“无限次提交”。(嗯,我尝试了两次,大约两次),每次您打开弹出对话框(重新)调用流程。

分步解决:

  1. 通过卸载应用程序来准备设备,然后确保您具有最新的Google Play商店更新。在我的Sony Xperia X1上,这是设置->关于手机-> Android版本-> Google Play系统更新。

  2. 无论上述操作是否重启了设备,请关闭设备,然后再次打开(不要重新启动-关闭,然后打开(即冷启动)。

  3. 现在进入“设置”->“应用和通知”->“ Google Play”->“存储和缓存”,然后同时进行清除缓存清除存储。 (这不会影响您已安装的任何应用程序。)

  4. 根据您的应用内审核代码库为IAT创建签名版本。即使您已经发布了产品,也必须这样做。

  5. 现在在设备上安装 IAT发行版 -应将“(内部Beta)”或与此相关的词如果您要从正确的位置(例如IAT)下载,请输入名称(不要运行它,只需安装)

  6. 在Android Studio 清洁,重建和调试中,您的应用在安装了IAT版本的设备上。如果收到消息“设备已经有带有相同程序包但签名不同的应用程序”。 不要单击确定以卸载您的IAT版本。请按照此处的说明进行操作:Android: Error - App has same packaged different signature。可接受的答案是正确的。如果必须这样做,请注意,您应该再次进行清理并重建->调试

希望现在一切都可以了。成功完成上述步骤后,您实际上可以在后续的调试会话中从设备上“清理”卸载该应用程序,并且该程序仍然可以工作。

要进行测试并删除评论,请注意以下内容。提交评论后,您可以在Google Play控制台中看到它(不是在“评论”下,而是在“测试反馈”下)。同样,您似乎无法删除“测试反馈”下的评论。您需要从设备上的IAT下载页面上将其删除。在那里,在您的私人反馈标题下,选择评论右侧的直角省略号,然后直接“删除”。

在您再次提交评论之前,您的弹出窗口现在将每次显示。瞧!

答案 7 :(得分:0)

请注意,您使用的不是com.mypackage吗?

2020-08-06 16:01:29.318 29618-29618/? I/PlayCore: UID: [10409]  PID: [29618] ReviewService : requestInAppReview (com.mypackage)

确保所使用的appId是设备中Play商店中所选帐户“拥有”(也由其安装)的appId。

我相信鉴于不同的要求,测试指南(https://developer.android.com/guide/playcore/in-app-review/test)在如何测试方面很明确。

我的提示:

  1. 在设备中仅使用一个帐户
  2. 确保帐户已安装该应用程序(显示在Play商店中的“应用程序和游戏”>“库”部分)
  3. 该帐户是GMAIL帐户,而不是GSuit
  4. 如果您转到应用程序播放列表页面,则可以使用该帐户进行审核。
  5. 该帐户尚未审核
  6. 如果您打算使用内部测试跟踪,请确保该帐户已加入测试跟踪。
  7. 在不同帐户之间切换并进行测试时,有时可能有助于从Play商店应用中“清除数据”。
  8. 使用其他帐户尝试上述所有方法

PS:您还可以测试内部应用程序共享。

答案 8 :(得分:0)

大多数情况都包含在其他答案中。我想强调更多的故障排除步骤。

  1. 确保用户帐户不受保护(如某些企业帐户)使用一些人员 G 邮件 ID 进行测试。
  2. 确保测试版应用的版本高于当前的 Live 应用 如果不是,则不会显示评论对话框。

答案 9 :(得分:0)

代码正确没有问题 我们可以按照几个步骤

  1. 通过 URL https://play.google.com/console/u/0/internal-app-sharing/
  2. 上传应用
  3. 设置谷歌游戏控制台你的项目设置->应用间共享->任何人都可以下载选择选项->保存
    3 检查您的移动内部应用共享以播放商店应用

答案 10 :(得分:0)

刚刚发现该应用必须经过谷歌的批准(即没有临时名称)

答案 11 :(得分:0)

我遇到了完全相同的问题,对话框从没出现过...

但是,即使如此,我仍将其保留在应用程序中并发布到Play商店中。

然后我下载并测试了该版本,一切正常。

答案 12 :(得分:0)

我参加了商店的Beta测试,结果显示。但是只显示一次。

答案 13 :(得分:0)

我的问题通过将上下文和活动类型转换为所需形式即应用程序上下文和活动来解决。尽管看起来不合逻辑,但没有其他事情对我有用

答案 14 :(得分:0)

我的工作代码:

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

在内部测试轨道上的应用上进行了测试(那里没有配额)。

答案 15 :(得分:0)

documentation

为了提供出色的用户体验,Google Play强制对 多久可以向用户显示一次审核对话框。因为这, 调用launchReviewFlow方法可能并不总是显示对话框。 例如,您不应使用号召性用语选项(例如 按钮)以触发评论,因为用户可能已经点击了他们的 配额和流量将不会显示,给 用户。

因此,您不希望它每次都显示该对话框,也无法知道该对话框是否显示,或者用户没有查看您的应用程序

答案 16 :(得分:-1)

请使用FakeReviewManager进行测试:)

ReviewManager管理器=新的FakeReviewManager(上下文);

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

答案 17 :(得分:-1)

文档说,由于具有配额限制,因此不会在每次请求时都显示: https://developer.android.com/guide/playcore/in-app-review#quotas

我只是将其包含在我的项目中,并且只显示了一次对话框。由于我们对此没有任何控制,因此有点不方便。

此外,我注意到,如果您尝试一次又一次地显示对话框,导航栏会开始闪烁(就像它想显示对话框一样,但是被关闭了)。