getSubscriptionToken function

String getSubscriptionToken(
  1. PurchaseDetails purchase
)

Returns the token for a SUBSCRIPTION to be used with VerifyLocalPurchase.verifySubscription.

  • iOS/macOS: parses localVerificationData JSON to extract originalTransactionId, which is stable across renewals and restores.
  • Android: returns purchase.verificationData.serverVerificationData (the subscription token).

Throws VerifyPurchaseException with VerifyPurchaseErrorCode.invalidToken if the token is missing.

Example:

final token = getSubscriptionToken(purchase);
final result = await VerifyLocalPurchase.verifySubscription(token);

Implementation

String getSubscriptionToken(PurchaseDetails purchase) {
  if (Platform.isIOS || Platform.isMacOS) {
    // iOS/macOS: parse localVerificationData JSON to get originalTransactionId
    // The originalTransactionId is stable across renewals and restores
    String? originalTransactionId;
    try {
      final data = jsonDecode(purchase.verificationData.localVerificationData);
      if (data is Map) {
        originalTransactionId = data['originalTransactionId']?.toString();
      }
    } on FormatException {
      originalTransactionId = null;
    }
    return _requireToken(originalTransactionId, 'originalTransactionId');
  }
  // Android: use serverVerificationData (contains the subscriptionToken)
  return _requireToken(
    purchase.verificationData.serverVerificationData,
    'subscription token',
  );
}