Setting Up In-App Review (Rating Request) in Mobile App

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Setting Up In-App Review (Rating Request) in Mobile App
Simple
from 4 hours to 2 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Setting Up In-App Review (Review Request) in Mobile Apps

SKStoreReviewRequest on iOS and In-App Review API on Android are native dialogs letting users leave a rating without leaving the app. Native dialog conversion is significantly higher than custom popover with "go to App Store" offer.

iOS: SKStoreReviewRequest

import StoreKit

// iOS 16+
func requestReviewIfAppropriate() {
    guard let scene = UIApplication.shared.connectedScenes
        .first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene
    else { return }

    SKStoreReview.requestReview(in: scene)
}

Key limitation: Apple lets show dialog no more than 3 times per 365 days regardless of requestReview call frequency. Beyond quota calls — iOS simply doesn't show dialog. No callback about dialog shown — nothing.

This means: three display moments per year is your entire budget. Spending them on just-installed users wastes budget. Optimal moments:

  • After completing main action (user achieved goal)
  • After N sessions (5–10), not on first launch
  • After positive event: first successful payment, first completed project

Testing in Xcode Simulator: dialog shows every time, ignoring quota — development only. On real device — quota works.

Android: In-App Review API

// build.gradle
implementation 'com.google.android.play:review:2.0.1'
implementation 'com.google.android.play:review-ktx:2.0.1'
class MainActivity : AppCompatActivity() {

    private lateinit var reviewManager: ReviewManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        reviewManager = ReviewManagerFactory.create(this)
    }

    fun requestInAppReview() {
        val request = reviewManager.requestReviewFlow()
        request.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                val reviewInfo = task.result
                val flow = reviewManager.launchReviewFlow(this, reviewInfo)
                flow.addOnCompleteListener {
                    // Dialog completed (or wasn't shown)
                    // No info if user left review
                }
            }
        }
    }
}

Similarly iOS: Google doesn't guarantee dialog shows. Google's internal quota is unknown publicly, but in practice: no more than once per 30 days per user. Calling launchReviewFlow more often — dialog won't appear without error.

Testing on Android

In DEBUG builds dialog doesn't work realistically. For testing — FakeReviewManager:

val reviewManager = if (BuildConfig.DEBUG) {
    FakeReviewManager(context)
} else {
    ReviewManagerFactory.create(context)
}

FakeReviewManager always shows dialog without quotas — convenient for QA.

Request Moment: Main Factor

Wrong moment is primary reason for low In-App Review conversion. Typical anti-patterns:

  • First launch: user hasn't understood value yet
  • On error or failed action: requesting after crash
  • On app exit: dialog blocks process, annoys
  • Forcefully 3 days post-install without activity check

What works: requesting after user demonstrated engagement. E.g., reading app — after third completed book. Habit tracker — after 7-day streak. E-commerce — after second successful order.

Workaround on Quota Exhaustion

When quota exhausted, native dialog won't appear. Standard practice: offer user deeplink to store.

// iOS — deeplink to App Store review page
let appID = "123456789"
let url = URL(string: "https://apps.apple.com/app/id\(appID)?action=write-review")!
UIApplication.shared.open(url)
// Android — deeplink to Google Play
val uri = Uri.parse("market://details?id=${packageName}")
val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)

Show this deeplink only to high-NPS users or after explicit positive signal.

Process

Determine optimal moment based on user flow.

Integrate SKStoreReviewRequest (iOS) and In-App Review API (Android).

Configure FakeReviewManager for testing.

Optional fallback to deeplink for users beyond quota.

Timeline Estimates

In-App Review integration for iOS and Android — 2–4 hours. With logic for determining moment based on user events — 1 day.