Проверка статуса подписки в Kotlin Multiplatform SDK

Чтобы решить, может ли пользователь получить доступ к платному контенту или должен ли он увидеть пейвол, нужно проверить его уровень доступа в профиле.

В этой статье показано, как обращаться к состоянию профиля для принятия решений: показывать пейвол или открывать платные возможности.

Получение статуса подписки

Когда вы решаете, показывать ли пользователю пейвол или платный контент, вы проверяете его уровень доступа в профиле. Есть два варианта:

  • Вызовите getProfile, если нужны актуальные данные прямо сейчас (например, при запуске приложения) или хотите принудительно обновить профиль.
  • Настройте автоматические обновления профиля, чтобы хранить локальную копию, которая обновляется автоматически при изменении статуса подписки.

Получить профиль

Самый простой способ получить статус подписки — использовать метод getProfile:

Adapty.getProfile()
    .onSuccess { profile ->
        // check the access
    }
    .onError { error ->
        // handle the error
    }

Подписаться на обновления подписки

Чтобы автоматически получать обновления профиля в приложении:

  1. Используйте Adapty.setOnProfileUpdatedListener() для отслеживания изменений профиля — Adapty будет вызывать этот метод автоматически при каждом изменении статуса подписки пользователя.
  2. Сохраняйте обновлённые данные профиля при каждом вызове метода, чтобы использовать их в приложении без лишних сетевых запросов.
class SubscriptionManager {
    private var currentProfile: AdaptyProfile? = null
    
    init {
        // Listen for profile updates
        Adapty.setOnProfileUpdatedListener { profile ->
            currentProfile = profile
            // Update UI, unlock content, etc.
        }
    }
    
    // Use stored profile instead of calling getProfile()
    fun hasAccess(): Boolean {
        return currentProfile?.accessLevels?.get("YOUR_ACCESS_LEVEL")?.isActive == true
    }
}

Adapty автоматически вызывает слушатель обновлений профиля при запуске приложения, предоставляя кэшированные данные о подписке даже при отсутствии интернета.

Связь профиля с логикой пейвола

Когда нужно оперативно решить, показывать ли пейвол или открывать доступ к платным функциям, можно проверить профиль пользователя напрямую. Это удобно при запуске приложения, входе в разделы с премиум-контентом или перед отображением определённого контента.

private fun checkAccessAndShowPaywall() {
    // First, check if user has access
    Adapty.getProfile()
        .onSuccess { profile ->
            val hasAccess = profile.accessLevels?.get("YOUR_ACCESS_LEVEL")?.isActive == true
            
            if (!hasAccess) {
                // User doesn't have access, show paywall
                showPaywall()
            } else {
                // User has access, show premium content
                showPremiumContent()
            }
        }
        .onError { error ->
            // If we can't check access, show paywall as fallback
            showPaywall()
        }
}

private fun showPaywall() {
    // Get and display paywall using the KMP SDK
    Adapty.getPaywall("YOUR_PLACEMENT_ID")
        .onSuccess { paywall ->
            if (paywall.hasViewConfiguration) {
                val paywallView = AdaptyUI.createPaywallView(paywall = paywall)
                paywallView?.present()
            } else {
                // Handle remote config paywall or show custom UI
                handleRemoteConfigPaywall(paywall)
            }
        }
        .onError { error ->
            // Handle paywall loading error
            showError("Unable to load paywall")
        }
}

private fun showPremiumContent() {
    // Show your premium content here
    // This is where you unlock paid features
}

Дальнейшие шаги

Теперь, когда вы знаете, как отслеживать статус подписки, узнайте, как работать с профилями пользователей, чтобы они могли получить доступ к тому, за что заплатили.