Advanced
setSubscriptionStatus()
Manually sets the user's subscription status when using a custom PurchaseController.
This method should only be used with a custom PurchaseController
. The default purchase controller manages subscription status automatically.
Purpose
Manually updates the user's subscription status when implementing custom purchase logic.
Signature
Future<void> setSubscriptionStatus(SubscriptionStatus status)
Parameters
Name | Type | Description |
---|---|---|
status | SubscriptionStatus | The subscription status to set (active, inactive, unknown). |
Returns / State
Returns a Future<void>
that completes when the subscription status is updated.
Usage
After custom purchase:
class MyPurchaseController extends PurchaseController {
@override
Future<PurchaseResult> purchaseFromAppStore(String productId) async {
try {
// Custom purchase logic
final result = await MyPaymentService.purchase(productId);
if (result.success) {
// Update subscription status after successful purchase
await Superwall.shared.setSubscriptionStatus(
SubscriptionStatus.active,
);
return PurchaseResult.purchased;
}
return PurchaseResult.failed;
} catch (e) {
return PurchaseResult.failed;
}
}
}
Subscription expiry handling:
Future<void> _checkSubscriptionExpiry() async {
final expiryDate = await MyPaymentService.getSubscriptionExpiry();
if (expiryDate.isBefore(DateTime.now())) {
// Subscription has expired
await Superwall.shared.setSubscriptionStatus(
SubscriptionStatus.inactive,
);
// Show renewal prompt
_showRenewalPrompt();
}
}
Manual status sync:
Future<void> _syncSubscriptionStatus() async {
try {
final serverStatus = await MyAPI.getUserSubscriptionStatus();
final superwallStatus = serverStatus.isActive
? SubscriptionStatus.active
: SubscriptionStatus.inactive;
await Superwall.shared.setSubscriptionStatus(superwallStatus);
} catch (e) {
print('Failed to sync subscription status: $e');
}
}
How is this guide?