From our online logs, we observed that after a successful payment and the callback from try await product.purchase(options:), we call transaction?.finish(). A few seconds later, Transaction.updates returns an incomplete order. The transactionId in the receipt data of the callback is different from the previous one, but the appAccountToken is the same.
During this time, the user did not make any additional purchases, and our business logic ensures that each transaction has a unique appAccountToken. Therefore, we are certain that after one successful purchase, StoreKit2 provided us with callbacks for two different transactions.
From our online logs, we observed that after a successful payment and the callback from try await product.purchase(options:), we call transaction?.finish(). A few seconds later, Transaction.updates returns an incomplete order. The transactionId in the receipt data of the callback is different from the previous one, but the appAccountToken is the same.
During this time, the user did not make any additional purchases, and our business logic ensures that each transaction has a unique appAccountToken. Therefore, we are certain that after one successful purchase, StoreKit2 provided us with callbacks for two different transactions.