subscriptionStatus

A StateFlow property that indicates the subscription status of the user.

If you're using a custom PurchaseController, you must update this property whenever the user's entitlements change.

You can also observe changes via the SuperwallDelegate method subscriptionStatusDidChange(from, to).

Purpose

Indicates the current subscription status of the user and can be observed for changes using Kotlin StateFlow.

Signature

val subscriptionStatus: StateFlow<SubscriptionStatus>

// For setting the status (when using custom PurchaseController)
fun setSubscriptionStatus(status: SubscriptionStatus)
// Java
public StateFlow<SubscriptionStatus> getSubscriptionStatus()
public void setSubscriptionStatus(SubscriptionStatus status)

Parameters

This property accepts a SubscriptionStatus sealed class value:

  • SubscriptionStatus.Unknown - Status is not yet determined
  • SubscriptionStatus.Active(Set<Entitlement>) - User has active entitlements
  • SubscriptionStatus.Inactive - User has no active entitlements

Returns / State

Returns a StateFlow<SubscriptionStatus> that emits the current subscription status. When using a PurchaseController, you must set this property yourself using setSubscriptionStatus(). Otherwise, Superwall manages it automatically.

Usage

Set subscription status (when using PurchaseController):

Superwall.instance.setSubscriptionStatus("premium", "pro_features")
Superwall.instance.setSubscriptionStatus(SubscriptionStatus.Inactive)

Get current subscription status:

val status = Superwall.instance.subscriptionStatus.value
when (status) {
    is SubscriptionStatus.Unknown -> 
        println("Subscription status unknown")
    is SubscriptionStatus.Active -> 
        println("User has active entitlements: ${status.entitlements}")
    is SubscriptionStatus.Inactive -> 
        println("User has no active subscription")
}

Observe changes with StateFlow:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        lifecycleScope.launch {
            Superwall.instance.subscriptionStatus.collect { status ->
                updateUI(status)
            }
        }
    }
    
    private fun updateUI(status: SubscriptionStatus) {
        when (status) {
            is SubscriptionStatus.Active -> showPremiumContent()
            is SubscriptionStatus.Inactive -> showFreeContent()
            is SubscriptionStatus.Unknown -> showLoadingState()
        }
    }
}

Jetpack Compose observation:

@Composable
fun ContentScreen() {
    val subscriptionStatus by Superwall.instance.subscriptionStatus
        .collectAsState()
    
    Column {
        when (subscriptionStatus) {
            is SubscriptionStatus.Active -> {
                Text("Premium user with: ${subscriptionStatus.entitlements.joinToString()}")
            }
            is SubscriptionStatus.Inactive -> {
                Text("Free user")
            }
            is SubscriptionStatus.Unknown -> {
                Text("Loading...")
            }
        }
    }
}

Java usage:

// Get current status
SubscriptionStatus status = Superwall.getInstance()
    .getSubscriptionStatus().getValue();

// Set status (when using PurchaseController)
Superwall.getInstance().setSubscriptionStatus("premium");

To observe status changes from Java, set a SuperwallDelegateJava and implement its subscriptionStatusDidChange(from, to) callback.

How is this guide?

On this page