TL;DR Can you postpone the finishTransaction call on a consumable in iOS to mimic androids consumeAsync?
In Android one can purchase an item it will end up in a list managed by the billing api. And can be accessed via [queryPurchaseHistoryAsync][1].
An item can then be consumed later. The purchase and the consumption are two separate things so.
An account is optional in our app and we use the described functionality in android to keep track of the items a user has purchased / but not yet consumed also when one lost his/her device.
The docs are not clear on the [SKPaymentQueue][2] regarding multi-device synchronization.
"The contents of the queue are persistent between launches of your app."
But in practice, it seems to be exchanged between devices.
While different [sources][3] suggest you have to take care of managing the state of consumables for your self.
I was wondering if one can use the SKPaymentQueue as a single point of truth by keeping the consumable [SKPaymentTransaction][4] in the [purchased][5] state. I would therefore not call the [finishTransaction][6] before the item has actually consumed.
In theory, the transaction should stay in the SKPaymentQueue and should be transferred to all devices logged in with the same AppStore account.
As soon as the transaction is finished on one of the devices it should get removed from the queue and again the information should be spread to all devices.
I couldn't find this approach somewhere and I would like to know if I miss something important here.
[2]: https://developer.apple.com/documentation/storekit/skpaymentqueue
[4]: https://developer.apple.com/documentation/storekit/skpaymenttransaction
[5]: https://developer.apple.com/documentation/storekit/skpaymenttransactionstate/purchased
[6]: https://developer.apple.com/documentation/storekit/skpaymentqueue/1506003-finishtransaction