Skip to main content

Accepting payments without installing RuStore

Users can now pay for purchases and subscriptions in your app even if RuStore is not installed on their devices. For subscriptions they’ll need to sign in with VK ID, and for one-time in-app purchases it’s enough to enter an e-mail to receive the receipt.

Benefits

You can grow revenue and reach a wider audience because:

  • users can complete purchases even if they haven’t installed RuStore yet;
  • you can keep accepting payments while distributing the app across multiple stores.

Purchases without sign-in for Pay SDK (version 9.0.1)

  • Paying without RuStore is available starting with Pay SDK 9.0.1.
  • Checkout works without VK ID and without a mandatory e-mail. Users may optionally enter an e-mail to receive a receipt.
  • Payment methods aren’t saved between payments. Available methods: new card, SBP (Fast Payment System), and SberPay.
  • You can request the purchase list (getPurchases) without authorization. The response contains payments made on the current device using Pay SDK 9.0.1. Keep this in mind when migrating from Billingclient SDK.
  • During checkout you can pass an internal user ID or e-mail to simplify refunds. Such a payment is easy to find in RuStore Console using the provided identifier.
  • A user who isn’t authorized in RuStore is automatically routed to the out-of-RuStore payment flow.
  • Authorization isn’t required for other SDK calls either. If you want to accept payments only via RuStore, first check whether RuStore is installed (isRuStoreInstalled from RuStoreUtils) and whether the user is authorized (getUserAuthorizationStatus). If needed, open RuStore’s authorization screen with RuStoreUtils.openRuStoreAuthorization(context: Context).

Purchases without authorization for Billingclient SDK

  • Paying without VK ID is available only for consumable and non-consumable in-app products.
  • Subscriptions cannot be purchased without authorization.
  • The buyer must enter an e-mail to receive the receipt.
  • Payment methods aren’t saved, so the user re-enters payment details for every purchase. To save and reuse payment methods the buyer needs to sign in with VK ID.
  • Your app should not call the purchase list, because it’s unavailable for an unauthorized user. See Before you begin to remove those calls in your code.
  • A refund to an unauthorized buyer can be made only using the receipt sent to the e-mail provided at checkout. See Refund for an unauthorized user.

Purchases with authorization

Warning

Applies to Billingclient SDK only. Buying subscriptions via Pay SDK is currently unavailable.

  • VK ID authorization is required for subscriptions. The buyer may also sign in when purchasing in-app products.
  • The user must sign in with VK ID when the SDK requests the purchase list (getPurchases). To reduce the number of authorization prompts, see Before you begin.

Before you begin

We recommend the following changes before migrating to Payments SDK 6.1.0+:

  • Reduce authorization prompts (Billingclient SDK only).

    Your app may call the SDK for the purchase list—for example, to show a game balance, subscription tier, or check if the PRO version was bought.

    Such calls will trigger frequent VK ID prompts, which is inconvenient.

    Replace getPurchases calls with your app’s internal logic. Store purchase lists locally or on your server and keep them in sync via RuStore API.

    You can also encourage users to keep progress and purchases in an external account (e.g., Google Play).

    Once you remove those calls, the user will only be prompted to sign in at checkout.

  • Set up analytics.

    If you distribute the app via multiple channels and want to split payment flows by source, create separate build variants using build flavors. This lets you track analytics per distribution channel.

When authorization is requested

Warning

Applies to Billingclient SDK only.

The table shows when and how often the user is asked to authorize.

ConditionAuthorization promptNotes
RuStore is not installed on the device

The prompt appears:

  • in every app session when calling:
    • getPurchases
    • purchaseProduct
  • and if more than 900 seconds have passed since the previous SDK call within the same session:
    • getPurchases
    • purchaseProduct

Starting from SDK 7.0.0 a product can be purchased without mandatory VK ID (an e-mail is enough for the receipt).
getPurchases always requires VK ID authorization.

To check if RuStore is installed, use isRuStoreInstalled from RuStoreUtils (returns true/false).

RuStore is installed, but the user is not authorized

The prompt appears when calling:

  • getPurchases
  • getProducts
  • purchaseProduct

Since SDK 8.0.0 getProducts works without authorization for a user who isn’t signed in to RuStore.
Also starting with 8.0.0, it’s no longer mandatory to authorize the user in RuStore.
When calling purchaseProduct, the Payments SDK allows the user to pay either by signing in with VK ID or by entering an e-mail for the receipt on the payment sheet.
When calling getPurchases, the user must sign in with VK ID on the payment sheet.
The prompt will reappear if more than 900 seconds have passed since the previous SDK call.

For SDK versions below 8.0.0 you must authorize the user in RuStore. After checking RuStore presence, call getAuthorizationStatus to see if the user is authorized. Open RuStore’s auth screen with RuStoreUtils.openRuStoreAuthorization(context: Context). After successful sign-in the user is returned to your app. They won’t need to re-authorize until they explicitly sign out in the RuStore app.

RuStore is installed and the user is authorizedAuthorization is checked seamlessly for the user.

See also