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.
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:
- Legal persons and individual entrepreneurs registered in the Russian Federation.
- Foreign companies not registered in the Russian Federation.
- Self-employed individuals.
Prerequisites
- App uploaded to RuStore Console.
- App passed moderation (you don't have to publish the app).
- 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.
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.
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
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:
- Receive information on products created in the RuStore Console.
- Initialize payment so that the users could purchase products that you added to your app.
- Control products purchasing to prevent from possible errors.
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.
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.
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.
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.
Context | Authorization request | Features |
---|---|---|
RuStore is not installed on the device | Authorization request looks like:
| Method |
RuStore is installed on the device, but the user is not authorized | An authorization request is triggered when calling SDK methods:
| When calling the |
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.
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.