Play Core In-App Review API not showing the Review Activity

AndroidGoogle PlayGoogle Play-Core

Android Problem Overview


I'm trying to utilize the Review API (Play Core library 1.8.0) from Google which was just released yesterday. See https://developer.android.com/guide/playcore/in-app-review

I followed the troubleshooting section carefully, I made sure the app is downloaded from the internal testing track, my account does not have a review on the app, the app is in the library of that user etc.. I even tried with a completely new account, but every time the com.google.android.finsky.inappreviewdialog.InAppReviewActivity is shown only to immediately disappear.

I'm calling the following code from the onResume() method of my activity:

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

Both listeners return success.

Here is the log output:

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 

Anyone had success to make this working? Any tips. Big thanks!

Android Solutions


Solution 1 - Android

Okay, I had exactly the same problem as described by the OP and as is listed on the issue tracker here: https://issuetracker.google.com/issues/167352813 and has still not been resolved as yet by GoogleDev.

Same UI manifestation(s), same log entries (incidentally, the log entries are the same when it works though, complete with the entry that says “ReviewService : linkToDeath”, but let’s not worry about that eh?)

The key thing, you'll no-doubt want to know though, to avoid too much suspense, is that IT WORKS. The in-app review API works! No need for me to repeat the block of code for calling the review flow, it is pretty much exactly the same as in the docs, similar to what the OP has listed, and several others have kindly repeated.

Took me a while, but I got to the bottom of it as follows, in a nutshell:

  1. Your device needs to have the latest Google Play system update

  2. Irrespective of whether your app is published on the Play Store YOU ABSOLUTELY NEED TO DO YOUR TESTING VIA INTERNAL APP TESTING or SHARING (I only did “Internal App Testing”, but I expect the same applies)

  3. To debug your code with Android Studio, you need to have installed your Internal App Testing version on your device AND RUN THE DEBUGGER SUCCESSFULLY WITH YOUR IAT VERSION STILL INSTALLED ON THE DEVICE AT LEAST ONCE

  4. Once you are up and running, when the review dialog pops up, you have to note that, if you submit a review, then you have utilised all your quota. When you try and launch the review flow again it looks like the “problem” has returned. You get “successful” launch but nothing shows. If you have submitted a review (and this is why it absolutely needs to be in IAT), then it is only a “private review” (not seen publicly on your app page), and you need to DELETE THE REVIEW TO GET THE POP UP TO SHOW AGAIN.

  5. You can select “Not Now” instead of "Submit" ad infinitum (well, I tried about two-dozen times) and the pop-up dialog will launch each time you (re)call the flow.

So, step-by-step fix:

  1. Prepare your device by uninstalling your app, then ensure you have the latest Google Play Store update. On my Sony Xperia X1 this is Settings->About Phone->Android version->Google Play system update.

  2. Irrespective of whether the above restarted your device, turn your device off and then back on again (don’t restart - off then on i.e. cold boot).

  3. Now go into Settings->Apps & notifications->Google Play->Storage & Cache, then do both CLEAR CACHE and CLEAR STORAGE. (This should not affect any of your installed apps).

  4. Create a signed release for IAT based on your In-App review code base. You have to do this even if you have a release in production.

  5. Now install your IAT RELEASE on your device - the words, "(Internal Beta)" or words to that effect, should be appended to your app name if you are downloading from the right location (i.e. IAT), (do not run it, just install)

  6. In Android studio Clean, Rebuild and Debug, your app on the device with the IAT version installed. If you get a message saying "The device already has an application with the same package but a different signature." DON'T CLICK OK TO UNINSTALL YOUR IAT VERSION Follow the instructions here: https://stackoverflow.com/questions/27872959/android-error-app-has-same-packaged-different-signature. The accepted answer is the correct one. If you have to do this, please note you should do a Clean and Rebuild->Debug again.

Hopefully, now all should be okay. Once you have done the above steps successfully, you can actually "clean" uninstall the app from the device on subsequent debugging sessions, and it will still work.

To test, and to delete a review note the following. When you submit a review, you will be able to see it in Google Play Console (not under "Reviews", incidentally but) under "Testing Feedback". Also you cannot delete your review under "Testing Feedback" it seems. You need to delete it from your IAT download page on the device. On there, under the heading Your private feedback, select the right-angled ellipsis thingy to the right of your review and simply "Delete".

Your pop-up will now show every time until you submit another review. Voila!

Solution 2 - Android

I have raised a issue on google issue tracker regarding this. I also have the same issue.

For more info check this my issue tracking url: https://issuetracker.google.com/issues/167352813

Solution 3 - Android

I also saw the same problem, my request review flow works, then the launch review flow works, but nothing displays (I do notice the small line at the center of the bottom of the screen appears briefly, and my audio cuts out briefly as the app is paused and then resumed but no review flow appeared).

I was able to get it to work by adding a user to my device that was not in my list of License Testers (Google developer console) and had not reviewed my app previously. I was able to display the rating popup once, I cancelled the operation so that I could test it again, but it would not reappear afterwards. It appears to be a one shot thing and they are aggressively guarding against annoying the user with review popups.

This feature doesn't seem useful for my case, I have a button on the settings screen to rate my app. Since I have no way of knowing what happened, I can't thank the user, I can't disable the button or display an "you already rated this thank you" message, and the button just appears to do nothing so it looks like a bug. I guess the intended use is to ask the user during gameplay, and if they cancel the dialog accidentally then it's just too bad for you.

Ideally Google should allow License Testing users to display this popup more than once for testing purposes.

Solution 4 - Android

I just want to share the code that is working reliably today (2020-09-03). It was essentially copied from 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);
    }
});

It was tested with internal app sharing on a Android 10. It never failed to show the review dialog.

Solution 5 - Android

I had the same problem and I solved with the next steps:

  1. Adding my APK file to internal testing channel
  2. Adding a tester user with a gmail account ex: [email protected]. GSuite mails don't work
  3. With the tester mail, accept the tester privilege
  4. With a physical device signed with the tester user email, go to Play Store and download the app

It works!!

Note: If App is not published yet, you could use Google Console App Sharing

Solution 6 - Android

For all the users that needs a working JAVA code, please find my code below:

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

Make sure the below is implemented:

implementation 'com.google.android.play:core:1.8.0'

And please also note, that the dialog will only display if your app is in production, alpha or internal testing on the Google Play Console Account.

Solution 7 - Android

Try uploading your app to Internal App Sharing

I have found that with the exact same apk uploaded to Internal Testing versus Internal App Sharing, the latter is more reliable in displaying the In-App Review Flow every time I try testing it.

You would need to enable Internal app sharing in the Play Store to be able to install your app from the link provided by uploading your apk.

Basically go to the Play Store, go to Settings, scroll down to Play Store version and tap it a bunch of times to "Become a developer", then enable Internal app sharing.

Solution 8 - Android

I had same issue, I've followed below steps then working fine

  1. If you mark stars and submit, then need to remove your review from play store.
  2. Clear data for Play Store.

Solution 9 - Android

My working code:

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

Tested on an app from Internal Test track (there is no quota there).

Solution 10 - Android

I had exactly the same problem, the dialog never appeared to me ...

But even so, I left it implemented in the application and posted it on the Play store.

Then I downloaded and tested the version and everything works perfectly.

Solution 11 - Android

In MY case, yes, this will not work if the account that’s being used already left a review.

HOWEVER, deleting the review from the Play Store doesn’t always work. Something lingers.

So, unless you want to be sad, CLEAR THE PLAY STORE APP’S STORAGE EVERY TIME YOU DELETE THE REVIEW THAT’S LEFT. You do not need to also clear the cache as well as others have suggested (clearing the storage will also do this), but clearing the Play Store app’s cache was not enough. Once I did this, I could consistently test this ad nauseum.

Good luck. What a mess this is.

Solution 12 - Android

Documentation says that it won't be shown every time you request it since it has quota restrictions: https://developer.android.com/guide/playcore/in-app-review#quotas

I just included it in my project and it showed the dialog only one time. It is a little inconvenient since we don't have any controls over it.

Also, I noticed that if you try to show the dialog again and again, navigation bar starts blinking (like it wants to show the dialog but it gets dismissed).

Solution 13 - Android

The documentation says

> To provide a great user experience, Google Play enforces a quota on > how often a user can be shown the review dialog. Because of this, > calling a launchReviewFlow method might not always display a dialog. > For example, you should not have a call-to-action option (such as a > button) to trigger a review as a user might have already hit their > quota and the flow won’t be shown, presenting a broken experience to > the user.

So you don't expect it to show the dialog every time and also there's no way to know if the dialog is shown or not nor the user has reviewed your app or not either

Solution 14 - Android

My problem was solved by typecasting the context and activity to the required form i.e application context and activity . Although it seems illogical, nothing else worked for me

Solution 15 - Android

I joined the beta in the store and it showed. But just show once time.

Solution 16 - Android

Just to be clear you are not using com.mypackage right?

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

Ensure that the appId used is the one that it's "owned" (aka installed by) by the selected account in the Play Store in the device.

I believe the test guide (https://developer.android.com/guide/playcore/in-app-review/test) is clear in terms of how to test it given the different requirements.

My tips:

  1. Use only one account in the device
  2. Ensure that account has installed the app (appears in the app & games > Library section in Play Store)
  3. The account is a GMAIL one, not a GSuit
  4. You can review with the account if you go to the app play listing page.
  5. The account has not reviewed
  6. If you intend to use the Internal Test Track ensure the account has joined the test track.
  7. When switching between different accounts and testing things out, sometimes might be helpful to "Clear Data" from the Play Store app.
  8. Try all the above with different account

PS: You could test also the Internal App Sharing.

Solution 17 - Android

Just discovered that the app must be approved from google (i.e. not having the temporary name)

Solution 18 - Android

The code is correct no issue we can follow a few steps

  1. app upload following URL https://play.google.com/console/u/0/internal-app-sharing/
  2. setup google play console your project setup->inter app sharing-> anyone can download select the option -> to save
    3 check your mobile internal app sharing to play store app

Solution 19 - Android

Most of the cases are covered in other answers. I want to highlight few more troubleshooting Steps .

  1. Make sure the user account is not protected (like some enterprise accounts) use some personnel G mail ID to test.
  2. Make Sure the version of beta app is greater then the currently Live application if its not then it will not show up the review dialogue.

Solution 20 - Android

Please test using FakeReviewManager :)

ReviewManager manager = new FakeReviewManager(context);

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPetr NalevkaView Question on Stackoverflow
Solution 1 - AndroidKofiView Answer on Stackoverflow
Solution 2 - AndroidPrantik MondalView Answer on Stackoverflow
Solution 3 - AndroidAaron LakeView Answer on Stackoverflow
Solution 4 - AndroidHongView Answer on Stackoverflow
Solution 5 - AndroidJorge MartinezView Answer on Stackoverflow
Solution 6 - AndroidGoRoView Answer on Stackoverflow
Solution 7 - AndroidAlan Joseph CaceresView Answer on Stackoverflow
Solution 8 - AndroidAsk ShiwaView Answer on Stackoverflow
Solution 9 - AndroidDavid VávraView Answer on Stackoverflow
Solution 10 - AndroidCommancheView Answer on Stackoverflow
Solution 11 - AndroidBinkView Answer on Stackoverflow
Solution 12 - AndroidZhanbolat RaimbekovView Answer on Stackoverflow
Solution 13 - Androidahmed naderView Answer on Stackoverflow
Solution 14 - AndroidAnkur SharmaView Answer on Stackoverflow
Solution 15 - AndroidTrung Hau DinhView Answer on Stackoverflow
Solution 16 - AndroidMarcelView Answer on Stackoverflow
Solution 17 - Androiddrom1xView Answer on Stackoverflow
Solution 18 - AndroidR M VivekView Answer on Stackoverflow
Solution 19 - AndroidADMView Answer on Stackoverflow
Solution 20 - AndroidSamarakandeView Answer on Stackoverflow