Is there a minimum time between prompts for SKStoreReviewController.requestReview()?
Asked Answered
P

2

10

I understand that when we call SKStoreReviewController.requestReview(), Apple decides whether to show a review prompt based on a variety of factors. What I'm curious about is the minimum time between prompts for our app. According to Apple, there is some limit (emphasis mine):

If the user hasn't already given feedback and a request hasn't been made too recently, the system displays an in-app prompt that asks for a rating and an optional written review.

I understand that there are no guarantees about the behavior of this call beyond what's in its documentation, but I'm wondering what happens in practice.

I'm trying to figure out whether we need to implement our own logic to wait a reasonable amount of time before requesting the prompt again, or if Apple's definition of "recently" is good enough for this purpose.

Phosphorescence answered 12/1, 2018 at 15:3 Comment(0)
D
0

It's not documented and there is no (non-hacky) way to detect if the prompt was displayed, hence no way to collect data on this behaviour. Very frustrating!

Personally I throttle the frequency of calls to requestReview to ensure that they are sufficiently spaced out in time and that the first call won't happen before the user has had plenty of time to use the app.

Deification answered 17/1, 2018 at 21:0 Comment(5)
No need to perform the throttling in your app. Apple takes care of this as to not show it too often.Extemporary
@Extemporary How else would you ensure that the prompt doesn't show up when the user completes their very first "high value" task? One of my apps is a printing app and I don't want the user to be asked to rate the app the first time they print something. I want it to be done after at least 5 prints and not the first day they use the app. Hence my throttling of calls to requestReview. It may be unnecessary but given that the behaviour currently isn't documented, it's the only way to be sure.Deification
@Extemporary Your own response was "in our video app, we call it after the user has completed watching two videos". That's what I mean by throttling, you don't call it after each video. We are saying the same thing.Deification
I interpret throttling as meaning that requestReview() is called not only when a defined criteria is met, but also conditional on some period of elapsed time has passed so as to not ask too often. My point is that as a developer, you really don't need to be concerned about asking too often as iOS already has that restriction built in. I just wanted to make that point clear that the programmer should rather focus on requesting at the right time without concern for asking too often.Extemporary
Remember that requestReview will ignore all calls after its third prompt in one year (even if you keep updating the app). If you work on an app built for the long run, delivering new features over the months, does it not make sense to do some time-based throttling too? I'd argue that it does. Maybe not for everyone, but it's not a one-size-fits-all.Deification
E
0

The advice our team was given from Apple was to call requestReview after the user completes a “high value” task. For example, in our video app, we call it after the user has completed watching two videos. Doing this, the user is naturally likely to be more satisfied with the app, and more willing to rate it as they are not being interrupted in the middle of a task.

I would recommend putting more effort on identifying the best times to prompt for a review, and let Apple’s code regulate the frequency of the prompts. The exact behavior is likely to be fine-tuned by Apple over time.

Extemporary answered 21/1, 2018 at 14:26 Comment(2)
I get what you're saying here, but I am still curious about the core of my question: what minimum interval does Apple actually use in practice if I call requestReview() often?Phosphorescence
I have asked that to our Apple rep and Apple will not disclose that. He also mentioned it was subject to change based on criteria that also could not be shared. Further, trying to determine that with a development build will not work either, as requestReview() will always result in a prompt, unlike a production build.Extemporary

© 2022 - 2024 — McMap. All rights reserved.