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 determinedSubscriptionStatus.Active(Set<Entitlement>)- User has active entitlementsSubscriptionStatus.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?