getIosPastPurchases method

Future<List<PurchaseDetails>> getIosPastPurchases()

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;
}