britannio / in_app_review

A Flutter plugin for showing the In-App Review/System Rating pop up on Android, IOS, and MacOS. It makes it easy for users to rate your app.
311 stars 81 forks source link

requestReview only successful on emulator #9

Closed kenthor closed 1 year ago

kenthor commented 3 years ago

I think I'm experiencing the opposite problem to other people:

I can get the review dialog to appear when I'm running a debug version in the emulator.

The same debug version does not open the review dialog on my phone (Samsung Galaxy 9+). (the isAvailable() function returns true on the phone)

I have published a release version on an internal test track and tried to download and run this. Same result: no review dialog is showing up.

I have never submitted any review, so quota limits should not be the issue here.

kenthor commented 3 years ago

Emulator and phone are both using the same Google account

Emulator is running Android 8.1.0 The phone is running Android 10

This is the code I am executing:

Future<void> _requestReview() async {
  if (await _inAppReview.isAvailable()) _inAppReview.requestReview();
}

Debug output when executing on emulator:

D/EGL_emulation(22781): eglMakeCurrent: 0xa78961c0: ver 2 0 (tinfo 0xaa4ffc90)
I/InAppReviewPlugin(22781): isAvailable: called
I/InAppReviewPlugin(22781): isAvailable: playStoreInstalled: true
I/InAppReviewPlugin(22781): isAvailable:lollipopOrLater: true
I/InAppReviewPlugin(22781): isAvailable: The Play Store is available and Android 5 or later is being used
I/InAppReviewPlugin(22781): cacheReviewInfo: called
I/PlayCore(22781): UID: [10084]  PID: [22781] ReviewService : requestInAppReview (ws.thorup.checkedout)
I/InAppReviewPlugin(22781): cacheReviewInfo: Requesting review flow
I/PlayCore(22781): UID: [10084]  PID: [22781] ReviewService : Initiate binding to the service.
I/PlayCore(22781): UID: [10084]  PID: [22781] ReviewService : ServiceConnectionImpl.onServiceConnected(ComponentInfo{com.android.vending/com.google.android.finsky.inappreviewservice.InAppReviewService})
I/PlayCore(22781): UID: [10084]  PID: [22781] ReviewService : linkToDeath
I/PlayCore(22781): UID: [10084]  PID: [22781] OnRequestInstallCallback : onGetLaunchReviewFlowInfo
I/PlayCore(22781): UID: [10084]  PID: [22781] ReviewService : Unbind from service.
I/InAppReviewPlugin(22781): onComplete: Successfully requested review flow
I/InAppReviewPlugin(22781): requestReview: called
I/InAppReviewPlugin(22781): launchReviewFlow: called
W/JavaBinder(22781): BinderProxy is being destroyed but the application did not call unlinkToDeath to unlink all of its death recipients beforehand.  Releasing leaked death recipient: com.google.android.play.core.internal.ai

Debug output when executing on phone:

I/InAppReviewPlugin( 3957): isAvailable: called
I/InAppReviewPlugin( 3957): isAvailable: playStoreInstalled: true
I/InAppReviewPlugin( 3957): isAvailable:lollipopOrLater: true
I/InAppReviewPlugin( 3957): isAvailable: The Play Store is available and Android 5 or later is being used
I/InAppReviewPlugin( 3957): cacheReviewInfo: called
I/PlayCore( 3957): UID: [10438]  PID: [3957] ReviewService : requestInAppReview (ws.thorup.checkedout)
I/InAppReviewPlugin( 3957): cacheReviewInfo: Requesting review flow
I/PlayCore( 3957): UID: [10438]  PID: [3957] ReviewService : Initiate binding to the service.
I/PlayCore( 3957): UID: [10438]  PID: [3957] ReviewService : ServiceConnectionImpl.onServiceConnected(ComponentInfo{com.android.vending/com.google.android.finsky.inappreviewservice.InAppReviewService})
I/PlayCore( 3957): UID: [10438]  PID: [3957] ReviewService : linkToDeath
I/PlayCore( 3957): UID: [10438]  PID: [3957] OnRequestInstallCallback : onGetLaunchReviewFlowInfo
I/PlayCore( 3957): UID: [10438]  PID: [3957] ReviewService : Unbind from service.
I/InAppReviewPlugin( 3957): onComplete: Successfully requested review flow
I/InAppReviewPlugin( 3957): requestReview: called
I/InAppReviewPlugin( 3957): launchReviewFlow: called
W/ActivityThread( 3957): handleWindowVisibility: no activity for token android.os.BinderProxy@ed14c34
I/MultiWindowDecorSupport( 3957): updateCaptionType >> DecorView@88d7a5d[], isFloating: true, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: true
D/MultiWindowDecorSupport( 3957): setCaptionType = 0, DecorView = DecorView@88d7a5d[]
D/ViewRootImpl@547e71e[PlayCoreDialogWrapperActivity]( 3957): setView = com.android.internal.policy.DecorView@88d7a5d TM=true MM=false
D/ViewRootImpl@6456ae0[MainActivity]( 3957): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager( 3957): prepareNavigationBarInfo() DecorView@7c0a747[MainActivity]
D/InputMethodManager( 3957): getNavigationBarColor() -855310
D/ViewRootImpl@547e71e[PlayCoreDialogWrapperActivity]( 3957): Relayout returned: old=(0,63,1080,2094) new=(540,1047,540,1047) req=(0,0)0 dur=8 res=0x7 s={true 483598962688} ch=true
D/OpenGLRenderer( 3957): createReliableSurface : 0x705fea98c0(0x7098be9000)
I/mali_winsys( 3957): new_window_surface() [1x1] return: 0x3000
D/ViewRootImpl@6456ae0[MainActivity]( 3957): stopped(false) old=false
D/ViewRootImpl@547e71e[PlayCoreDialogWrapperActivity]( 3957): stopped(true) old=false
D/OpenGLRenderer( 3957): destroyEglSurface : 0x70fc266280
I/mali_egl( 3957): eglDestroySurface() in
I/mali_winsys( 3957): delete_surface() [1x1] return
I/mali_egl( 3957): eglDestroySurface() out
W/libEGL  ( 3957): EGLNativeWindowType 0x705fea98d0 disconnect failed
D/OpenGLRenderer( 3957): ~ReliableSurface : 0x705fea98c0
D/ViewRootImpl@547e71e[PlayCoreDialogWrapperActivity]( 3957): dispatchDetachedFromWindow
D/InputTransport( 3957): Input channel destroyed: 'c7404f4', fd=105
D/ViewRootImpl@6456ae0[MainActivity]( 3957): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager( 3957): prepareNavigationBarInfo() DecorView@7c0a747[MainActivity]
D/InputMethodManager( 3957): getNavigationBarColor() -855310
D/ViewRootImpl@6456ae0[MainActivity]( 3957): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager( 3957): prepareNavigationBarInfo() DecorView@7c0a747[MainActivity]
D/InputMethodManager( 3957): getNavigationBarColor() -855310
D/ViewRootImpl@6456ae0[MainActivity]( 3957): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager( 3957): prepareNavigationBarInfo() DecorView@7c0a747[MainActivity]
D/InputMethodManager( 3957): getNavigationBarColor() -855310
britannio commented 3 years ago

@kenthor Could you try installing your app via Internal App Sharing instead and let me know if you still face this issue? https://developer.android.com/guide/playcore/in-app-review/test#internal-app-sharing

kenthor commented 3 years ago

Installing via App Sharing did the trick! Now the review dialog shows up on the phone.

The documentation does mention that some verification steps will be skipped when using App Sharing, so maybe the reason for the dialog not being shown when using the internal test track could be that Google Play regards the dialog to be requested too soon (?)

britannio commented 3 years ago

Installing via App Sharing did the trick! Now the review dialog shows up on the phone.

The documentation does mention that some verification steps will be skipped when using App Sharing, so maybe the reason for the dialog not being shown when using the internal test track could be that Google Play regards the dialog to be requested too soon (?)

The verification steps is referring to the app being processed/reviewed which would increase the wait time before you could install the app. I'll test the plugin using the internal test track to see if I can reproduce the original issue you faced.

britannio commented 1 year ago

Closing as a stale issue. Drop a comment and I'll reopen it.