getIosPastPurchases method
Implementation
Future<List<PurchaseDetails>> getIosPastPurchases() async {
// Step 1: Get local transactions
final transactions = await SKPaymentQueueWrapper().transactions();
final List<PurchaseDetails> purchases = [];
for (final txn in transactions) {
purchases.add(PurchaseDetails(
purchaseID: txn.transactionIdentifier,
productID: txn.payment.productIdentifier,
transactionDate: txn.transactionTimeStamp != null
? (txn.transactionTimeStamp! * 1000).toInt().toString()
: "0",
status: PurchaseStatus.purchased,
verificationData: PurchaseVerificationData(
localVerificationData: "",
serverVerificationData: "",
source: "appstore",
),
));
}
// Step 2: Get receipt data from device
final receiptData = await _getReceiptData();
if (receiptData != null) {
final receipt = await verifyReceipt(receiptData, isSandbox: isSandbox);
// Parse expiry info from receipt
final latestReceiptInfo = receipt['latest_receipt_info'] as List<dynamic>? ?? [];
for (final item in latestReceiptInfo) {
final productId = item['product_id'];
final expiresDateMs = int.tryParse(item['expires_date_ms'] ?? "0") ?? 0;
final expiryDate = DateTime.fromMillisecondsSinceEpoch(expiresDateMs);
final isExpired = DateTime.now().isAfter(expiryDate);
AppLogs.showInfoLogs(
"iOS Receipt: $productId expires at $expiryDate | Active: ${!isExpired}",
);
}
}
return purchases;
}