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

Review fails to work in iOS 14 in production #11

Closed 127 closed 3 years ago

127 commented 3 years ago

The same app review button works perfectly in lower iOS versions.

timmae219 commented 3 years ago

The openStoreListing() method does also not work in iOS 14. When the page should be opened, Safari shows a warning that the page could not be opened because the URL is invalid. But if I build the URL which is generated in the method "by hand" and launch it in the browser, it navigates correctly to the store page. Maybe there is a problem with the queryParameters?

timmae219 commented 3 years ago

Okay, there might not be problems with the queryParameters...

Pressing the Launch Button produces the following stack trace :

[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: PlatformException(Error, Error while launching https://apps.apple.com/app/id<OUR_APP_ID>?action=write-review, null, null)
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:582:7)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:18)
<asynchronous suspension<asynchronous suspension>>
#2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
#3      MethodChannelUrlLauncher.launch (package:url_launcher_platform_interface/method_channel_url_launcher.dart:40:21)
#4      launch (package:url_launcher/url_launcher.dart:92:58)
#5      InAppReview._launchUrl (package:in_app_review/in_app_review.dart:76:13)
<asynchronous suspension<asynchronous suspension>>
#6      InAppReview.openStoreListing (package:in_app_review/in_app_review.dart:60:13)
britannio commented 3 years ago

@127 & @timmae219 Can you try running the example app included in the repo on IOS 14. I'm not encountering any of these issues.

127 commented 3 years ago

@127 & @timmae219 Can you try running the example app included in the repo on IOS 14. I'm not encountering any of these issues.

It works as a charm in debug environment even on iOS 14 and in iOS <14 in production. I've switched from app_review package because of the same issue. Looks like there are some common issues for both packages in iOS 14.

britannio commented 3 years ago

@127 Maybe this isn't an IOS 14 issue then but instead, you've exceeded the quota of the IOS review API. You can only use it 3 times in a 365 day period according to https://developer.apple.com/design/human-interface-guidelines/ios/system-capabilities/ratings-and-reviews/. There's likely also a limit on how frequently you can use the API.

127 commented 3 years ago

@britannio I've got my app rejected by app store with another package app_review. It passed with yours (I think they just did not test that this time) but behavior is the same - fails. Installed it on a new device with another appstore account - the same. Not working. Ios 13 works.

britannio commented 3 years ago

@britannio I've got my app rejected by app store with another package app_review. It passed with yours (I think they just did not test that this time) but behavior is the same - fails. Installed it on a new device with another appstore account - the same. Not working. Ios 13 works.

app_review uses the same underlying IOS API. What message did the Apple review team provide when it failed with app_review? And did you test IOS 14 before testing IOS 13 to rule out the quota limit? This plugin is very simple so there isn't much that can go wrong on my behalf, especially since it works when you're debugging the app.

127 commented 3 years ago

app_review uses the same underlying IOS API. What message did the Apple review team provide when it failed with app_review? And did you test IOS 14 before testing IOS 13 to rule out the quota limit? This plugin is very simple so there isn't much that can go wrong on my behalf, especially since it works when you're debugging the app.

Team told me that nothing happens when tapping on review button. I tested it on absolutely new untested device with another test account which never had this app installed before — 13 worked, 14 — no. I know about 3/365 limit. And there was no any change of code that works with plugin, only iOS version rise. I think both plugins have the same problem.

britannio commented 3 years ago

@127 Are you following the guidelines as your app might have been rejected for violating them? I just tried out well-spoken.app on an Iphone running IOS 14.1 as it's using this plugin and it worked flawlessly so if @chris-rutkowski could confirm that they are still using inAppReview.requestReview() to display the review pop up then IOS 14 can be ruled out as the cause of this.

chris-rutkowski commented 3 years ago

@britannio yes we do ( https://well-spoken.app )

timmae219 commented 3 years ago

@britannio I don't think it has something to do with the quotas. The in-app review dialogue works perfectly in iOS and Android. The problem occurs only if I want to navigate to the store page, if the in-app dialogue is not available. If I understood the concept of the quotas correctly, it handles only the availability of the in-app dialog, doesn't it? Then the quota should not have an effect on launching the store page. Now I'll try to run the example app you told me.

britannio commented 3 years ago

@britannio I don't think it has something to do with the quotas. The in-app review dialogue works perfectly in iOS and Android. The problem occurs only if I want to navigate to the store page, if the in-app dialogue is not available. If I understood the concept of the quotas correctly, it handles only the availability of the in-app dialog, doesn't it? Then the quota should not have an effect on launching the store page. Now I'll try to run the example app you told me.

Are you only having issues with openStoreListing()?

timmae219 commented 3 years ago

@britannio Unfortunately, the example app produces the same stacktrace as my app, no matter which app store id I provide. I think there is a problem with safari on the emulator. If I try to launch the url in the safari app, there also appears an error message which says that the URL is invalid. But the URL works perfectly with my MacOS Safari.

timmae219 commented 3 years ago

@britannio I don't think it has something to do with the quotas. The in-app review dialogue works perfectly in iOS and Android. The problem occurs only if I want to navigate to the store page, if the in-app dialogue is not available. If I understood the concept of the quotas correctly, it handles only the availability of the in-app dialog, doesn't it? Then the quota should not have an effect on launching the store page. Now I'll try to run the example app you told me.

Are you only having issues with openStoreListing()?

Yes. The in-app review works perfectly. I only have issues with the openStoreListing()function.

britannio commented 3 years ago

@britannio Unfortunately, the example app produces the same stacktrace as my app, no matter which app store id I provide. I think there is a problem with safari on the emulator. If I try to launch the url in the safari app, there also appears an error message which says that the URL is invalid. But the URL works perfectly with my MacOS Safari.

The simulator doesn't have the App Store installed which would explain openStoreListing() not working on the simulator.

timmae219 commented 3 years ago

@britannio Unfortunately, the example app produces the same stacktrace as my app, no matter which app store id I provide. I think there is a problem with safari on the emulator. If I try to launch the url in the safari app, there also appears an error message which says that the URL is invalid. But the URL works perfectly with my MacOS Safari.

The simulator doesn't have the App Store installed which would explain openStoreListing() not working on the simulator.

Well, that makes sense :D I will try it out with a physical device. Then it should work. Thank you for your reply.

timmae219 commented 3 years ago

@britannio works perfectly on a physical device!

127 commented 3 years ago

mine is https://brevy.app the reject was because it does nothing 2020-10-23 17 11 51

britannio commented 3 years ago

@127 I believe that you aren't following Apple's guidelines, specifically:

Don't use buttons or other controls to request feedback. Since the system limits how often rating prompts occur, attempting to request feedback in response to a control may result in no rating prompt being displayed.

You should instead use openStoreListing(...) to prevent your app from being rejected.

RPReplay-Final1603468885 ^^ Tested on an Iphone 8 running IOS IOS 14.1

127 commented 3 years ago

Aaah! Understood! My fault. The issue can be closed