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.
329 stars 82 forks source link

Method: "await _inAppReview.requestReview ();" - does not work #18

Closed Okladnoj closed 3 years ago

Okladnoj commented 3 years ago

I am using app evaluation package: in_app_review: ^ 2.0.0-nullsafety

void didChangeDependencies() {
    try {
      _inAppReview.isAvailable().then(
            (bool isAvailable) => setState(
              () => _isAvailable = isAvailable,
            ),
          );
    } catch (e) {
      setState(() => _isAvailable = false);
    }

    super.didChangeDependencies();
  }

I get such a terrible error log !!! (((

I/InAppReviewPlugin( 8791): isAvailable: called
I/InAppReviewPlugin( 8791): isAvailable: playStoreInstalled: true
I/InAppReviewPlugin( 8791): isAvailable:lollipopOrLater: true
I/InAppReviewPlugin( 8791): isAvailable: The Play Store is available and Android 5 or later is being used
I/InAppReviewPlugin( 8791): cacheReviewInfo: called
I/PlayCore( 8791): UID: [10937]  PID: [8791] ReviewService : requestInAppReview (radio.radiogram)
I/InAppReviewPlugin( 8791): cacheReviewInfo: Requesting review flow
I/PlayCore( 8791): UID: [10937]  PID: [8791] ReviewService : Initiate binding to the service.
I/PlayCore( 8791): UID: [10937]  PID: [8791] ReviewService : ServiceConnectionImpl.onServiceConnected(ComponentInfo{com.android.vending/com.google.android.finsky.inappreviewservice.InAppReviewService})
I/PlayCore( 8791): UID: [10937]  PID: [8791] ReviewService : linkToDeath
I/PlayCore( 8791): UID: [10937]  PID: [8791] OnRequestInstallCallback : onGetLaunchReviewFlowInfo
I/PlayCore( 8791): UID: [10937]  PID: [8791] ReviewService : Unbind from service.
I/InAppReviewPlugin( 8791): onComplete: Successfully requested review flow
W/JavaBinder( 8791): 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
Okladnoj commented 3 years ago

If I use a package like this: in_app_review: ^1.0.4

Then this method is called:

 Future<void> _requestReview() async {
    final isAvailable = await _inAppReview.isAvailable();
    if (isAvailable) {
      print(isAvailable);
      _inAppReview.requestReview();
      print('isAvailable');
    } else {}
  }

Throws this error:

I/InAppReviewPlugin( 9926): isAvailable: called
I/InAppReviewPlugin( 9926): isAvailable: playStoreInstalled: true
I/InAppReviewPlugin( 9926): isAvailable:lollipopOrLater: true
I/InAppReviewPlugin( 9926): isAvailable: The Play Store is available and Android 5 or later is being used
I/InAppReviewPlugin( 9926): cacheReviewInfo: called
I/PlayCore( 9926): UID: [10937]  PID: [9926] ReviewService : requestInAppReview (radio.radiogram)
I/InAppReviewPlugin( 9926): cacheReviewInfo: Requesting review flow
I/PlayCore( 9926): UID: [10937]  PID: [9926] ReviewService : Initiate binding to the service.
I/PlayCore( 9926): UID: [10937]  PID: [9926] ReviewService : ServiceConnectionImpl.onServiceConnected(ComponentInfo{com.android.vending/com.google.android.finsky.inappreviewservice.InAppReviewService})
I/PlayCore( 9926): UID: [10937]  PID: [9926] ReviewService : linkToDeath
I/PlayCore( 9926): UID: [10937]  PID: [9926] ReviewService : Unbind from service.
I/PlayCore( 9926): UID: [10937]  PID: [9926] OnRequestInstallCallback : onGetLaunchReviewFlowInfo
I/InAppReviewPlugin( 9926): onComplete: Successfully requested review flow
I/flutter ( 9926): true
I/flutter ( 9926): isAvailable
I/InAppReviewPlugin( 9926): requestReview: called
I/InAppReviewPlugin( 9926): launchReviewFlow: called
I/Timeline( 9926): Timeline: Activity_launch_request time:34541651
I/flutter ( 9926): app in inactive
W/ActivityThread( 9926): handleWindowVisibility: no activity for token android.os.BinderProxy@bf2461e
E/radio.radiogra( 9926): Invalid ID 0x00000000.
D/ForceDarkHelper( 9926): updateByCheckExcludeList: pkg: radio.radiogram activity: com.google.android.play.core.common.PlayCoreDialogWrapperActivity@80ffef7
I/chatty  ( 9926): uid=10937(radio.radiogram) identical 1 line
D/ForceDarkHelper( 9926): updateByCheckExcludeList: pkg: radio.radiogram activity: com.google.android.play.core.common.PlayCoreDialogWrapperActivity@80ffef7
V/PhoneWindow( 9926): DecorView setVisiblity: visibility = 4, Parent = null, this = DecorView@8890164[]
D/ViewRootImpl[PlayCoreDialogWrapperActivity]( 9926): hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false
E/FA      ( 9926): Missing google_app_id. Firebase Analytics disabled. See https://goo.gl/NAOOOI
2
W/JavaBinder( 9926): 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
V/PhoneWindow( 9926): DecorView setVisiblity: visibility = 0, Parent = android.view.ViewRootImpl@abb9393, this = DecorView@8890164[PlayCoreDialogWrapperActivity]
E/GraphicExt( 9926): GraphicExtModuleLoader::CreateGraphicExtInstance false
D/Surface ( 9926): Surface::connect(this=0x797b01c000,api=1)
D/mali_winsys( 9926): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/Surface ( 9926): Surface::setBufferCount(this=0x797b01c000,bufferCount=3)
D/Surface ( 9926): Surface::allocateBuffers(this=0x797b01c000)
I/flutter ( 9926): app in resumed
V/PhoneWindow( 9926): DecorView setVisiblity: visibility = 0, Parent = android.view.ViewRootImpl@fbe62c7, this = DecorView@312e0f4[MainActivity]
E/flutter ( 9926): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(Background audio task not running, null, null, null)
E/flutter ( 9926): #0      StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:582
E/flutter ( 9926): #1      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:162
E/flutter ( 9926): <asynchronous suspension>
E/flutter ( 9926): #2      AudioService.customAction
package:audio_service/audio_service.dart:1050
E/flutter ( 9926): <asynchronous suspension>
E/flutter ( 9926):
D/Surface ( 9926): Surface::disconnect(this=0x797313f000,api=1)
D/Surface ( 9926): Surface::connect(this=0x797313f000,api=1)
D/mali_winsys( 9926): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/Surface ( 9926): Surface::setBufferCount(this=0x797313f000,bufferCount=3)
V/PhoneWindow( 9926): DecorView setVisiblity: visibility = 4, Parent = android.view.ViewRootImpl@abb9393, this = DecorView@8890164[PlayCoreDialogWrapperActivity]
D/Surface ( 9926): Surface::disconnect(this=0x797b01c000,api=1)
D/View    ( 9926): [Warning] assignParent to null: this = DecorView@8890164[PlayCoreDialogWrapperActivity]
britannio commented 3 years ago

@Okladnoj Can you confirm that you are following the testing instructions? https://github.com/britannio/in_app_review#testing

skykz commented 3 years ago

@britannio Same issue, I followed all instructions. But anyway nothing happened with _requestReview() =(

W/ActivityThread(17695): handleWindowVisibility: no activity for token android.os.BinderProxy@653b54c D/ZrHung.AppEyeUiProbe(17695): notify runnable to start. V/ActivityThread(17695): Skipping new config:{1.0 401mcc2mnc [ru_RU,en_RU] ldltr sw360dp w360dp h653dp 480dpi nrml long port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=Rect(0, 0 - 1080, 2032) mWindowingMode=fullscreen mActivityType=undefined} nonFullScreen=0 suim:1 s.7}, config:{1.0 401mcc2mnc [ru_RU,en_RU] ldltr sw360dp w360dp h653dp 480dpi nrml long port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=Rect(0, 0 - 1080, 2032) mWindowingMode=fullscreen mActivityType=undefined} nonFullScreen=0 suim:1 s.7} for app:kz.yera.bilim_ber V/ActivityThread(17695): callActivityOnCreate I/HwPhoneWindow(17695): updateLayoutParamsColor true mSpecialSet=false, mForcedNavigationBarColor=false, navigationBarColor=ff000000, mNavBarShow=true, mIsFloating=true D/ActivityThread(17695): add activity client record, r= ActivityRecord{3662a11 token=android.os.BinderProxy@653b54c {kz.yera.bilim_ber/com.google.android.play.core.common.PlayCoreDialogWrapperActivity}} token= android.os.BinderProxy@653b54c 2 D/ZrHung.AppEyeUiProbe(17695): notify runnable to start. D/ZrHung.AppEyeUiProbe(17695): stop checker. D/ZrHung.AppEyeUiProbe(17695): notify runnable to start. 2 I/HwPhoneWindow(17695): updateLayoutParamsColor false mSpecialSet=false, mForcedNavigationBarColor=true, navigationBarColor=ff9c27b0, mNavBarShow=true, mIsFloating=false

Above output from when i pressed button and call method _requestReview().

britannio commented 3 years ago

@britannio Same issue, I followed all instructions. But anyway nothing happened with _requestReview() =(

W/ActivityThread(17695): handleWindowVisibility: no activity for token android.os.BinderProxy@653b54c D/ZrHung.AppEyeUiProbe(17695): notify runnable to start. V/ActivityThread(17695): Skipping new config:{1.0 401mcc2mnc [ru_RU,en_RU] ldltr sw360dp w360dp h653dp 480dpi nrml long port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=Rect(0, 0 - 1080, 2032) mWindowingMode=fullscreen mActivityType=undefined} nonFullScreen=0 suim:1 s.7}, config:{1.0 401mcc2mnc [ru_RU,en_RU] ldltr sw360dp w360dp h653dp 480dpi nrml long port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=Rect(0, 0 - 1080, 2032) mWindowingMode=fullscreen mActivityType=undefined} nonFullScreen=0 suim:1 s.7} for app:kz.yera.bilim_ber V/ActivityThread(17695): callActivityOnCreate I/HwPhoneWindow(17695): updateLayoutParamsColor true mSpecialSet=false, mForcedNavigationBarColor=false, navigationBarColor=ff000000, mNavBarShow=true, mIsFloating=true D/ActivityThread(17695): add activity client record, r= ActivityRecord{3662a11 token=android.os.BinderProxy@653b54c {kz.yera.bilim_ber/com.google.android.play.core.common.PlayCoreDialogWrapperActivity}} token= android.os.BinderProxy@653b54c 2 D/ZrHung.AppEyeUiProbe(17695): notify runnable to start. D/ZrHung.AppEyeUiProbe(17695): stop checker. D/ZrHung.AppEyeUiProbe(17695): notify runnable to start. 2 I/HwPhoneWindow(17695): updateLayoutParamsColor false mSpecialSet=false, mForcedNavigationBarColor=true, navigationBarColor=ff9c27b0, mNavBarShow=true, mIsFloating=false

Above output from when i pressed button and call method _requestReview().

Can you confirm that you are following the testing instructions? https://github.com/britannio/in_app_review#testing It seems like you didn't install your app via internal app sharing although the logs you've provided don't look like they're related to the API.

skykz commented 3 years ago

And same other logs like a @Okladnoj @britannio .

britannio commented 3 years ago

And same other logs like a @Okladnoj @britannio .

How are you installing your app?

skykz commented 3 years ago

And same other logs like a @Okladnoj @britannio .

How are you installing your app?

via USB in vs code

britannio commented 3 years ago

And same other logs like a @Okladnoj @britannio .

How are you installing your app?

via USB in vs code

Unfortunately that will not work on Android, this is the most common issue users of this plugin run into. Do you think that the README.md isn't clear enough? Would a pinned issue help?

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

You need to upload your app to the Google Play Store using internal app sharing to test this feature.

skykz commented 3 years ago

And same other logs like a @Okladnoj @britannio .

How are you installing your app?

via USB in vs code

Unfortunately that will not work on Android, this is the most common issue users of this plugin run into. Do you think that the README.md isn't clear enough? Would a pinned issue help?

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

You need to upload your app to the Google Play Store using internal app sharing to test this feature.

I think you should write with BIG letters this about Internal sharing test in README, also Provide more information about functions.

skykz commented 3 years ago

@britannio What does mean this lines of code?

setState( () => _isAvailable = isAvailable && !Platform.isAndroid, );

britannio commented 3 years ago

@britannio What does mean this lines of code?

setState( () => _isAvailable = isAvailable && !Platform.isAndroid, );

If you were to run the example app, requestReview() won't work, however isAvailable() will return true which is wrong so I override it by adding !Platform.isAndroid;

britannio commented 3 years ago

It can be ignored.