Is receiving the same transaction multiple times from Transaction.updates expected behavior?

I'm seeing behavior similar to what was reported in this thread:

https://developer.apple.com/forums/thread/816344

I read the discussion in the related thread (816320) as well, but I couldn't determine whether receiving the same transaction multiple times from Transaction.updates is considered expected behavior.

In my case, I'm testing an auto-renewable subscription in the Sandbox environment.

After successfully processing and calling finish() on a transaction, Transaction.updates sometimes provides another transaction with the same transactionId.

I've also observed the same transactionId being delivered multiple times through Transaction.updates itself.

I compared the JWS representations of these transactions. They are not byte-for-byte identical, but the transaction information appears to be the same. The only differences I've identified are:

  • signedDate
  • deviceVerificationNonce
  • deviceVerification

This looks as though the same transaction is being signed again at a different time.

I'd like to clarify the intended way to handle this:

Is it expected behavior for Transaction.updates to deliver the same transactionId multiple times in this way?

If so, after an app has successfully processed and finished a transaction, is it safe to recognize subsequent transactions with the same transactionId as already processed, skip entitlement-related processing, and simply call finish() on them?

In other words, can an app use transactionId to prevent duplicate processing of transactions that it has already successfully handled?

I'm specifically interested in whether doing so could cause the app to miss any meaningful update that StoreKit might later deliver using the same transactionId.

I have submitted this as a Feedback report: FB24533921.

Thank you for your attention to this matter.

Is receiving the same transaction multiple times from Transaction.updates expected behavior?
 
 
Q