SKStoreReviewController, how to determine that the user has turned off Rate. Is this application (RTA) in the settings or 3 times the limit?

Launching iOS 10.3, Apple limits the invitation to view (Rate this app) to 3 times a year and can be turned off in user settings.

Q: How do we find that we have reached the 3-fold limit or the user has disabled RTA, so in the application I will not show a pop-up message: “Did you like the application? If yes, can you write a review? [Yes / No]”, because then if the user hits Yes, nothing will appear.

There is not much information from the official documentation here: https://developer.apple.com/reference/storekit/skstorereviewcontroller

Although you should call this method when it makes sense in the user experience stream of your application, the actual display of the rating view / request view is governed by the application store policy. Since this method may or may not contain a warning, it is not recommended to call it in response to a button click or other user action.

+7
source share
2 answers

Preamble

Ask users if they like the application may lead to rejection of your application. Here is an example: https://twitter.com/pietbrauer/status/791883047373246464

In case the link here dies, excerpt from Apple's answer:

3.2.2 ... your application includes content and features that can manipulate user reviews or charts in the App Store. In particular, your application filters user reviews and directs users who intend to rate your application 4-5 stars to complete the rating on the App Store ...

I personally think that this may be the right tactic if you are really trying to solve the problem of users and still give them the opportunity to leave feedback after that, but the question remains if Apple sees this.

Possible Solution

  • Show a popup asking the user if they like / like / etc using the application.
  • Try using [SKStoreReviewController requestReview] to get an overview.
  • Check if the number of windows has changed, which indicates a pop-up window. The danger here is that it is not 100% more reliable, since some other event can lead to a change in the number of windows.
  • If the number of windows remains the same, use deep binding to forward the user to the application store. The docs for SKStoreReviewController suggest using action=write-review as a request parameter to go directly to the feedback page.

Here is a simple implementation:

 // make sure we the current iOS version supports in app reviews if ([SKStoreReviewController class]) { NSUInteger windowCount = [UIApplication sharedApplication].windows.count; [SKStoreReviewController requestReview]; // give the review controller some time to display the popup dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ if (windowCount < [UIApplication sharedApplication].windows.count) { // assume review popup showed instead of some other system alert // for example show "thank you" } else { // open app store to leave review NSURL *reviewUrl = [NSURL URLWithString:@"{your-app-url}?action=write-review"]; [[UIApplication sharedApplication] openURL:reviewUrl]; } }); } 

Note. I have not sent this code to the App Store, so this is only theoretical.

+4
source

Well, you can try to run the request and see, but until there is a callback, and there is no other official way to determine if a rating warning is displayed at the time the request method is called.

There is a way, but - one of the StoreKit classes can be tested so that you can observe when the Rating dialog box opens.

UIWindow ratings mentioned around can also be useful, but swizzling on method invocation is probably more reliable.

You can also use some rating managers, such as AppRating , available as a module that manage this material, but only at a naive level, counting calls and remembering it.

+3
source

Source: https://habr.com/ru/post/1266452/


All Articles