In the www.raywenderlich.com App Store Review tutorial Requesting App Ratings and Reviews Tutorial for iOS, the author (Sanket Firodiya) says that Apple enforces certain limitations:
- Three-times-per-year limit,
- There's no guarantee that the prompt will display, and
- "The system must not have shown the prompt for a version of the app bundle that matches the current bundle version. This ensures that the user is not asked to review the same version of your app multiple times."
I'm writing about that third limitation. The tutorial appears to say that Apple enforces that version limitation, but the tutorial's sample code does the enforcement, too (as does Apple's sample code). I believe that doing the version test before calling requestReview could easily result is no rating requests. As I explain below, it would be better if Apple did that test, but do they?
Details:
In Requesting App Store Reviews, Apple says we should do [SKStoreReviewController requestReview] only once per app version, and Apple's sample code includes a version test prior to calling requestReview. In addition, we're told that requestReview limits the dialog appearance to three times per year. Thus, if a particular call to requestReview results in no dialog, then there will be no more calls to requestReview (until the version is changed), and so there will be absolutely no rating dialogs for this version. And when the version is changed, it again seems unlikely that there will be a review dialog (unless the first call to requestReview shows a dialog).
This is confusing. Due to the version restriction on calling requestReview, the three-per-year limitation seems useless, or at least excessive. Because of these two conflicting restrictions, it appears possible that a user will never see a review dialog, even as new versions are released. But, I know this isn't the case. So, I believe Apple's example code of testing the current version is incorrect. It makes more sense that Apple would enforce that limitation because they'd know if a dialog appeared or not.
If the API returned a boolean indicating whether or not the dialog appeared, then we could save the version number only if the dialog appeared. I wonder if Apple does that in the SDK.
I understand Apple's other suggestions about when to issue requests, such as waiting for user engagement, not interrupting activity, etc. This question is only about the restriction having to do with the app version.
Should I implement the version restriction or not? If I do that test, how I can expect a dialog to ever appear? Perhaps, the first call to requestReview always results in a review dialog (if it's not the third call in a year) -- does it?
BTW, I'm not the first person with this concern. See forums.raywenderlich.com.
Jeff