Skip to main content

2.0.0

General

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

Check out the application example to learn how to properly integrate the Feedback SDK.

User scenario example

img

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

  1. Copy the plugin projects from the official RuStore repository into the GitFlic directory.
  2. Open the Android project from unreal_plugin_libraries folder in your IDE.
  3. Build the project via gradle assemble command.

If the build is successful, files will be created in unreal_example / Plugins / RuStoreReview / Source / RuStoreReview / ThirdParty / Android / libs and unreal_example / Plugins / RuStoreCore / Source / RuStoreCore / ThirdParty / Android / libs folders:

  • RuStoreUnityReview.aar;
  • RuStoreUnityCore.aar.
  1. Copy the contents of the unreal_example / Plugins folder to the "Plugins" folder inside your project. Restart Unreal Engine.
  2. In the plugins list (Edit > Plugins > Project > Mobile), select the RuStoreReview and RuStoreCore plugins.
  3. In the “YourProject.Build.cs” file of the PublicDependencyModuleNames list connect the “RuStoreCore” and “RuStoreAppUpdate” modules.
  4. In the project settings (Edit > Project Settings > Android) set the Minimum SDK Version parameter to level 24 or later and the Target SDK Version parameter to 31 or later.

Working with user ratings

Getting started with user ratings

To work with reviews, you need to initializeRuStoreReviewManager.

URuStoreReviewManager::Instance()->Init();

Blueprints example:

img
info

The Init()call binds the object to the scene root, and if no further work is planned on the object, the Dispose() method must be called to free up memory. Calling the Dispose method will unbind the object from the root and safely complete all requests sent.

URuStoreReviewManager::Instance()->Dispose();

If you need to check that the library is initialised, use the getIsInitialized() method, it returns true if the library is initialised, and false if Init has not yet been called.

Preparing to launch app evaluation

Call RequestReviewFlow() in advance before calling LaunchReviewFlow(), to prepare necessary information to display. ReviewInfo has a lifetime — about five minutes.
RequestReviewFlow
long requestId = URuStoreReviewManager::Instance()->RequestReviewFlow(
[](long requestId) {
// Process response
},
[](long requestId, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe> error) {
// Process error
}
);

Blueprints example:

The Failure callback returns a FURuStoreError structure with error information in the Error parameter.

Launching app evaluation

To run the feedback form in your app, call the LaunchReviewFlow() method using the previously obtained ReviewInfo.

Each request returns requestId that is unique per app launch. Each event returns requestId of the request that triggered this event.

LaunchReviewFlow
long requestId = URuStoreReviewManager::Instance()->LaunchReviewFlow(
[](long requestId) {
// Process response
},
[](long requestId, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe> error) {
// Process error
}
);

Blueprint implementation:

Await notification that the user has completed the form in 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 events Failure.

** Error structure**

USTRUCT(BlueprintType)
struct RUSTORECORE_API FURuStoreError
{
GENERATED_USTRUCT_BODY()

FURuStoreError()
{
name = "";
description = "";
}

UPROPERTY(BlueprintReadOnly)
FString name;

UPROPERTY(BlueprintReadOnly)
FString description;
};
  • name — error name;
  • description — error description.

** Possible errors **

  • 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;
  • RuStoreRequestLimitReached — not enough time has passed since the process was last shown;
  • RuStoreReviewExists — this user has already rated your app;
  • RuStoreInvalidReviewInfo — problems with ReviewInfo;
  • RuStoreException — basic RuStore error from which other errors are inherited.