getSubscriptionToken function
Returns the token for a SUBSCRIPTION to be used with VerifyLocalPurchase.verifySubscription.
- iOS/macOS: parses
localVerificationDataJSON to extractoriginalTransactionId, 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',
);
}