ActiveSubscription
ActiveSubscription#
Represents an active subscription returned by getActiveSubscriptions(). Provides a unified view of subscription status across platforms.
Cross-platform shape returned by getActiveSubscriptions. iOS: derived from Transaction.currentEntitlements filtered to subscription products (Apple docs). Android: derived from BillingClient.queryPurchasesAsync(SUBS) (Google docs).
Native references: Apple · Product.SubscriptionInfo.Status · Google · Sell subscriptions
Common Fields#
| Name | Type | Summary |
|---|---|---|
productId | string | Subscription product identifier |
isActive | boolean | Whether the subscription is currently active |
transactionId | string | Transaction identifier for backend validation |
purchaseToken | string? | JWS token (iOS) or purchase token (Android) for server validation |
transactionDate | number | Transaction timestamp (epoch ms) |
currentPlanId | string? | Unified plan identifier. On Android: basePlanId (e.g., "premium"). On iOS: productId (e.g., "com.example.premium_monthly"). ⚠️ Android: May be inaccurate for multi-plan subscriptions because Google Play Billing's Purchase object does not expose basePlanId directly — it has to be inferred. See limitation. |
Platform-Specific Fields#
iOS Fields#
| Name | Type | Summary |
|---|---|---|
expirationDateIOS | number? | Expiration timestamp (epoch ms) |
environmentIOS | ("Sandbox" | "Production")? | StoreKit environment |
daysUntilExpirationIOS | number? | Days until expiration |
renewalInfoIOS | RenewalInfoIOS? | Subscription renewal details |
Usage Example#
swift
// Check for pending upgrades
if let pendingProductId = subscription.renewalInfoIOS?.pendingUpgradeProductId {
print("Upgrade pending to: \(pendingProductId)")
}
// Check if subscription is cancelled
if subscription.renewalInfoIOS?.willAutoRenew == false {
print("Subscription will not auto-renew")
}