My App does not actively prompt the user to rate the app on the App Store, it only includes a "Rate this app" page in the app settings. So the user has access the page manually and only after he taps on a Do Rate
button, he is redirected to the App Store.
Of course the UI of SKStoreReviewController
is much more straight forward than redirecting the user to the App Store app to leave his review. So I simply changed the call to the App Store URL to a call of [SKStoreReviewController requestReview]
.
This works fine in all my tests: The rating dialog is presented every time I tap the review button.
However I wonder how this will behave outside the debug environment in real live. According to the Apple docs, [SKStoreReviewController requestReview]
is limited to 3 prompts per App per year.
[SKStoreReviewController requestReview]
) have no effect or will there be some kind of feedback?[SKStoreReviewController requestReview]
or if I have to send the user to the Store manually?[SKStoreReviewController requestReview]
calls? Is using it three days in a row as legit as using it every 4 month?Although I can't quote an official response (and I can't guarantee how long these findings will remain true), I just spent some time reverse engineering the logic and it seems to be pretty simple.
When you request a review, StoreKit sends a message to com.apple.itunesstored.xpc
, which is responsible for enforcing and tracking limits. If request limits haven't been reached, the XPC process tracks the request and responds with an app review token. Otherwise, it responds with nil.
After the XPC response has been received, StoreKit checks to see whether the token was nil. If it is non-nil, an SKStoreReviewViewController
is instantiated and presented in an internal UIWindow
. Otherwise, the request is silently ignored. There is no callback or notification you can listen for, and while there is some code in the XPC handler for logging errors, I didn't see any sources of errors in the XPC process.
As far as the logic behind the limits, it's quite simple. There are two conditions that must be met:
The user must not be prompted more than three times in the past 365 days, regardless of app version.
The user must not be prompted if they rated the app in a prior request, unless:
Although Apple recommends waiting for further engagement over a few weeks before requesting another prompt, at the moment, there is no logic that prevents you from prompting the user three times within three minutes. Those prompts will count for all three of your prompts for the next 365 days though.
StoreKit will silently ignore any excess requests and you can't determine when that happens.
Although you could track your requests yourself to know when you need to redirect to the App Store vs request a review, Apple may change the logic at any point in time. There is no way to programmatically query your limits.
Three prompts per year means three prompts within the past 365 days, regardless of app version. (Updating the app clears the "never prompted again" requirement though.)
There is no limitation of interval between two request review calls.
For your situation, I'd recommend using the new App Store URL that brings users directly to a review composition screen. This will work more consistently while still following the HIG guidelines (since it's in response to a button press).
To automatically open a page on which users can write a review in the App Store, append the query parameter action=write-review to your product URL.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With