7.0.0
RuStore In-app Review SDK prompts the user to rate your app and leave feedback on RuStore without exiting the app.
Rating and feedback user scenarios may be run at any time throughout the user’s path in your app. The user can rate your app from 1 to 5 and leave feedback. Feedback is optional.
Implementation example
Review the example app to learn how to correctly integrate the Reviews and Ratings SDK.
User scenario example

Prerequisites
For rating and feedback SDK to operate correctly, the following conditions need to be met:
- Android 7.0 or later.
- The current version of RuStore is installed on the user's device.
- User is authorized in RuStore.
App mus be published in RuStore .
When to ask for feedback
Use the tips below to decide when to ask the user to rate and leave feedback: (See below
-
Start the process once the user has been using your app for long enough.
-
Avoid starting it too often as this will impair your app’s user experience and limit the use or SDK ratings.
-
Avoid using calls to action like “Rate App” button as the user could have already reached the process starting limit.
-
Your app should not ask the user any questions before the start or while the process is running, including their opinion (“Do you like the app?”) or predictive questions (“Would you give this app 5 stars?”).
Design recommendations
Use the tips below to decide how to integrate the process:
-
Display the process as is, without any intervention or modification of existing design, including size, opacity, shape and other properties.
-
Add nothing on top or on sides of the process.
-
The process should open on top of all layers. Don’t close the process after starting. The process will close by itself after an express action by the user.
Connecting to project
- Kotlin
- Java
Connect the repository (see below).
repositories {
maven {
url = uri("https://artifactory-external.vkpartner.ru/artifactory/maven")
}
}
Connect the repository (see below).
repositories {
maven {
url "https://artifactory-external.vkpartner.ru/artifactory/maven"
}
}
Add the following code to your configuration file to inject the dependency:
- BOM
- Direct connection
Advantages of using a BOM file for configuration.
-
Unified version management:
- With BOM you can manage versions of all dependencies from a single file. This is especially useful when you use several libraries that must be compatible with each other.
- For example, if you have several RuStore libraries such as
ru.rustore.sdk:billingclient
andru.rustore.sdk:pushclient
, you can use BOM to make sure that they are all compatible with each other.
-
Easier updates:
- Updating dependencies is easier as you only have to change the version number in one place — in the BOM file. This lowers the risk of missing a dependency update and helps to avoid version conflicts.
- For example, if a new version of the BOM file contains updated versions of all libraries, you only have to update the BOM file, not each dependency.
-
Increased compatibility:
- Using BOM allows to avoid version conflicts between different libraries. This is especially important when libraries have mutual dependencies.
- For example, if two libraries depend on different versions of the same library, this can cause conflicts. BOM helps to avoid this making sure that all dependencies are compatible.
dependencies {
implementation(platform("ru.rustore.sdk:bom:7.0.0"))
implementation("ru.rustore.sdk:review")
}
dependencies {
implementation("ru.rustore.sdk:review:7.0.0")
}
Working with user ratings
Getting started with user ratings
- Kotlin
- Java
To work with reviews, you need to create RuStoreReviewManager
using RuStoreReviewManagerFactory
.
val manager = RuStoreReviewManagerFactory.create(context)
To work with reviews, you need to create RuStoreReviewManager
using RuStoreReviewManagerFactory
.
RuStoreReviewManager manager = RuStoreReviewManagerFactory.INSTANCE.create(context);
Preparing to launch app evaluation
- Kotlin
- Java
requestReviewFlow
in advance before calling launchReviewFlow
, to prepare necessary information to display. ReviewInfo
has a lifetime — about five minutes.
manager.requestReviewFlow()
.addOnSuccessListener { reviewInfo ->
// Save reviewInfo
}
.addOnFailureListener { throwable ->
// Handle error
}
- If
onSuccess
, response is received, save ReviewInfo locally to callLaunchReviewFlow
. later. - If
onFailure
is received, displaying the error to the user is not recommended because the user didn’t start this process.
requestReviewFlow
in advance before calling launchReviewFlow
, to prepare necessary information to display. ReviewInfo
has a lifetime — about five minutes.
manager.requestReviewFlow()
.addOnSuccessListener(reviewInfo -> {
// Save reviewInfo
})
.addOnFailureListener(throwable -> {
// Handle error
});
- If
onSuccess
, response is received, save ReviewInfo locally to callLaunchReviewFlow
. later. - If
onFailure
is received, displaying the error to the user is not recommended because the user didn’t start this process.
Launching app evaluation
- Kotlin
- Java
launchReviewFlow(reviewInfo)
method using the previously obtained ReviewInfo
.
manager.launchReviewFlow(reviewInfo)
.addOnSuccessListener {
// Review flow has finished, continue your app flow.
}
.addOnFailureListener { throwable ->
// Review flow has finished, continue your app flow.
}
onSuccess
or onFailure
to proceed with the application.
After completing the feedback form, regardless of the outcome (onSuccess
or onFailure
), it is not recommended to display any additional forms related to assessment and feedback.
If called frequently, launchReviewFlow
will not display the feedback window to the user, as the allowed display is regulated by RuStore.
launchReviewFlow(reviewInfo)
method using the previously obtained ReviewInfo
.
manager.launchReviewFlow(reviewInfo)
.addOnSuccessListener(unit -> {
// Review flow has finished, continue your app flow.
})
.addOnFailureListener(throwable -> {
// Review flow has finished, continue your app flow.
});
onSuccess
or onFailure
to proceed with the application.
After completing the feedback form, regardless of the outcome (onSuccess
or onFailure
), it is not recommended to display any additional forms related to assessment and feedback.
If called frequently, launchReviewFlow
will not display the feedback window to the user, as the allowed display is regulated by RuStore.
Errors processing
The errors that occur can be retrieved in the eventsonFailure
.
RuStoreNotInstalledException
— RuStore is not installed on the user's device;RuStoreOutdatedException
— RuStore version installed on the user's device does not support this SDK;RuStoreUserUnauthorizedException
— user is not authorized in RuStore;RuStoreUserBannedException
— user is blocked in RuStore;RuStoreApplicationBannedException
— app is banned in RuStore RuStore;RuStoreRequestLimitReached
— not enough time has passed since the process was last shown;RuStoreReviewExists
— this user has already rated your app;RuStoreInvalidReviewInfo
— problems withReviewInfo
;RuStoreException
— basic RuStore error from which other errors are inherited.