Skip to main content

How to manage payments in RuStore

You can monetize your app by allowing via RuStore purchases. Here are the 4 available options:

  • Sell your app from the storefront. Create a paid app, upload it to the RuStore storefront and receive payments for downloads.
tip

Keep in mind that you can profit from selling your app from the storefront only once. If you want to receive regular payments for your app, we suggest you consider adding subscriptions and paid apps.

  • Add renewable subscriptions. Subscriptions provide users with additional in-app advantages or games that they can play for a fixed monthly payment.
  • Add consumable goods. Consumable goods are can be purchased more than once once for in-app usage. For example: health boosts, hints, crystals, and coins in games.
  • Add non-consumable goods. In contrast to consumable goods, non-consumable goods can be purchased only once - they cannot be spent within an app or a game. After purchasing these goods, the user becomes their owner. This could be add removal, a hidden level or premium equipment in games.

All paid goods are added in the RuStore Console.

Where to start

To begin working with payments, fill out monetization request:

Prerequisites

  • App uploaded to RuStore Console.
  • App passed moderation (you don't have to publish the app).
Important
  • Test build signature (for example: debug) of the app must match the signature of the app build that was uploaded to the console and passed moderation (for example, release).
  • The user and the app are not banned in RuStore.
  • In-app purchases for the app are enabled in RuStore Console.
caution

The service has some restrictions to work outside of Russia.

Creating paid applications or goods

App an app for selling at the storefront in the RuStore Console if you selected this method of monetization.

If you want to monetize your app using paid products, in the RuStore Console create goods and subscriptions that will be build in your app.

info

You'll be able to change the price for your goods and subscriptions any time. After saving changes, the new price will be applied instantly. In case of subscriptions, lowering the price will affect all users including ones with the active subscription while increasing the price will affect only new subscribers.

See How to create a paid product, How to create a subscription

SDK configuration

Embed RuStore SDK into your app so that the users could purchase goods or subscriptions.

How do payments work

caution

The scheme below shows an approximate algorithm that you can use an example of how to configure and connect payments. Please, keep in mind the special aspects of your project while configuring payments.

With our SDK you can:

For more details, see SDK payments configuration

Purchase state model

CONSUMABLES - purchase state model

NON-CONSUMABLES - purchase state model

(SUBSCRIPTIONS) - purchase state model

Handling pending payments

Handling of unfinished payments is done by the developer.

To confirm a purchase of CONSUMABLE product in the PAID state, call the [purchase confirmation method].(#confirm) (see Retrieve purchase details).

When dealing with purchase cancellation using payment processing methods take into account your business logic. Some developers implement additional checks before purchase confirmation or cancellation. In that case, make a separate purchase state request.

tip

For example, if the user paid for the product that you cannot deliver for some reason, call the payment cancellation method for the purchase in the PAID status to cancel the purchase.

If the get purchases list method returns a purchase in the INVOICE_CREATED state, you can us the purchase cancellation method. For instance, if you don't want to see a purchase in that state in the purchase list. This is optional as RuStore handles cancellation of such purchases on its side.

info

In some cases, after paying with a bank app (SBP, SberPay, T-Pay, etc.) and returning to your app the purchase status may still be INVOICE_CREATED while payment status shows that the purchase failed. This is caused by the purchase processing time by the bank. In this case, you need to adapt your screen lifecycle to the product list retrieval logic.

Alternatively, you can implement cancellation of purchases in the INVOICE_CREATED state only through user action in your app. For example, create a dedicated button for this purpose.

Accepting Payments Without RuStore Installed

Users can now make payments and subscribe in your app, even if RuStore is not installed on their devices.

When making subscription payments, users will need to log in with their VK ID, but for in-app purchases, just providing an email for the receipt will be enough.

note

This feature is available when using the Payments SDK v.6.1.0 or higher. Please follow the recommended SDK adjustments before implementing the SDK.

Advantages Boost your revenue and build a loyal audience with the following benefits:

  • Users can make purchases without having to install RuStore.
  • You can keep accepting payments while publishing your apps across multiple platforms.

Purchases For Unauthorized Users

  • Payments without VK ID authorization are only available for consumable and non-consumable in-app purchases. Subscription payments still require authorization.

  • The buyer must provide an email address to receive a receipt for the purchase.

  • During payment, the buyer will be prompted to install RuStore to view their purchase history.

  • Payment methods are not saved, so the buyer will need to enter their payment details each time. To save payment methods for future purchases, the buyer must be logged in with VK ID.

  • The app should not request a list of purchases or available products, as this is not possible for unauthorized users. Refer to the recommended SDK adjustments for details on how to avoid these SDK calls.

  • Refunds for unauthorized buyers can only be processed using the receipt sent to the email provided at the time of purchase. See the Refund Process for Users Without Authorization for details.

Purchases For Authorized Users

  • Authorization via VK ID is required for subscription payments. However, buyers can choose to authorize when making in-app purchases as well.

  • During payment, buyers will be prompted to install RuStore, allowing them to skip authorization for future in-app payments.

  • Users must be logged in with VK ID when the Payments SDK requests the list of purchases (getPurchases method). To minimize the number of authorization requests, refer to the recommended SDK adjustments.

Before you start

We recommend making the following improvements before upgrading to Payments SDK version 6.0.0 or higher.

Minimize Authorization Requests

Your app may need to retrieve a list of purchases or available products from the SDK, for instance, to show a user’s game balance, subscription status, or to verify if they’ve bought the PRO version.

These requests will often require the user to log in with their VK ID, which can be inconvenient and potentially frustrating for them.

To reduce the number of authorization prompts, replace calls to the Payment SDK (getPurchases) with internal logic within your app. You can store purchase and product data locally or on a server and update it via the RuStore API.

Additionally, encourage users to link their account (such as Google Play) to save their game progress and purchases.

By minimizing these SDK requests, the user will only need to log in when making a purchase.

Set up Analytics

If your app is available on multiple platforms and you want to track payment flows based on the app's installation source, consider creating different build variants using build flavors. This will help you gather analytics specific to each distribution channel.

Authorization Request Features

This table specifies the conditions and frequency for which users receive authorization requests.

ContextAuthorization requestFeatures
RuStore is not installed on the device

Authorization request looks like:

  • when calling SDK methods in each app session:
    • getPurchases
    • purchaseProduct
  • If there is a gap of more than 900 seconds between SDK method calls within the same session:
    • getPurchases
    • purchaseProduct

Method getPurchases always requires user authorization via VK ID. To verify if RuStore is installed on the device, use the isRuStoreInstalled method from the RuStoreUtils toolkit. This method returns true or false depending on whether RuStore is present on the user's device.

RuStore is installed on the device, but the user is not authorized

An authorization request is triggered when calling SDK methods:

  • getPurchases
  • purchaseProduct

When calling the purchaseProduct method, the internal logic of the payment SDK will allow the user to purchase a product by authorizing with their VK ID or by providing an email for a receipt on the payment panel. When calling getPurchases, the user must authorize via VK ID on the payment panel. An authorization prompt will reappear if more than 900 seconds have passed since the previous SDK method call. If your application does not support purchases without authorization, after checking for RuStore’s presence on the device, refer to the getAuthorizationStatus method to verify user authorization. Use RuStoreUtils.openRuStoreAuthorization(context: Context) to open the RuStore authorization screen. After successful authorization, the user will automatically return to your application. Reauthorization will not be required until the user logs out of their RuStore profile.

RuStore is installed on the device, and the user is authorized

Authorization is verified seamlessly for the user.

Getting server notifications

To receive payments notifications online, configure server notifications. This will simplify your work - you won't have to constantly request payments statuses. RuStore will send you notifications on any payment status change.

Connecting API

Using our API will secure your app. Malicious users won't be able to break your app to get products and subscriptions for free.

To word with RuStore API, authorize and get a JWE token.

Use API methods to:

  • Get payment data to monitor apps and goods purchases as well as subscription payments.
  • Get subscription data You can use the method whose structure contains details on subscription period and status, for example: if it is active or suspended. Another method to receive subscription data will work for the developers that are used to similar tools.
  • Get subscription status - if you don't want to monitor other parameters.

See Connecting API payments

Test in-app purchases

Test your SDK and API integration with test payments. Test payment flow the same as with a regular payment - except that test payment cards are used.

Test payments

As soon as you receive your firs payments you'll be able to deal with them in the RuStore Console.

Still have questions left?