AppStorePurchaseDetails.fromSKTransaction constructor

AppStorePurchaseDetails.fromSKTransaction(
  1. SKPaymentTransactionWrapper transaction,
  2. String base64EncodedReceipt
)

Generate a AppStorePurchaseDetails object based on an iOS SKPaymentTransactionWrapper object.

Implementation

factory AppStorePurchaseDetails.fromSKTransaction(
  SKPaymentTransactionWrapper transaction,
  String base64EncodedReceipt,
) {
  final AppStorePurchaseDetails purchaseDetails = AppStorePurchaseDetails(
    productID: transaction.payment.productIdentifier,
    purchaseID: transaction.transactionIdentifier,
    skPaymentTransaction: transaction,
    status: const SKTransactionStatusConverter()
        .toPurchaseStatus(transaction.transactionState, transaction.error),
    transactionDate: transaction.transactionTimeStamp != null
        ? (transaction.transactionTimeStamp! * 1000).toInt().toString()
        : null,
    verificationData: PurchaseVerificationData(
        localVerificationData: base64EncodedReceipt,
        serverVerificationData: base64EncodedReceipt,
        source: kIAPSource),
  );

  if (purchaseDetails.status == PurchaseStatus.error ||
      purchaseDetails.status == PurchaseStatus.canceled) {
    purchaseDetails.error = IAPError(
      source: kIAPSource,
      code: kPurchaseErrorCode,
      message: transaction.error?.domain ?? '',
      details: transaction.error?.userInfo,
    );
  }

  return purchaseDetails;
}