Clarification on the use of webOrderLineItemID vs. id for managing auto-renewable subscriptions

I am working on implementing in-app purchases for my iOS app, specifically auto-renewable subscriptions. I've been trying to understand the differences between transaction.webOrderLineItemID and transaction.id and how they can be used in managing subscriptions.

Both of these properties seem to provide unique identifiers for transactions, but I am unclear about the specific benefits of using webOrderLineItemID over id. Can you please provide clarification on the following points?

What are the exact use cases where using webOrderLineItemID is more beneficial than id when managing auto-renewable subscriptions? Can different transactions have the same value for webOrderLineItemID? If not, how does it provide additional granularity or context compared to id? I appreciate any insights you can provide on this topic, as I want to ensure that I am using the appropriate identifiers for managing auto-renewable subscriptions in my app. Thank you!

Replies

To answer your question in terms of StoreKit 2:

StoreKit creates a transaction when a user successfully purchases something in your app:

https://developer.apple.com/documentation/storekit/transaction

The user's purchase and the associated transaction are not the exact same thing, however. There may be multiple transactions created in some cases for the same underlying purchase. This can be due to the user having multiple devices signed into the same Apple account while using original StoreKit, or in the case of restores. Though all of these transactions represent the same purchase made by the user, they will each have their own unique transactionId.

If the purchase made by the user was for an auto-renewable subscription, whether it be a first-time-subscribe or an automatic renewal, the associated transactions will also have a webOrderLineItemId. This field is unique to each subscription purchase, but is shared across all transactions generated for that purchase. Accordingly, the documentation for the field notes that it "identifies subscription purchase events across devices":

https://developer.apple.com/documentation/storekit/transaction/3749723-weborderlineitemid

StoreKit 2 helpfully abstracts many of these finer points, meaning you likely won't have a use for the webOrderLineItemId. Instead, you can simply use currentEntitlements to get the latest transaction for each product the user is entitled to, including active auto-renewable subscriptions.

https://developer.apple.com/documentation/storekit/transaction/3851204-currententitlements

  • Would you mind clarifying the difference in use between webOrderLineItemID and originalTransactionId? Specifically for server notifications, is it correct that only original_transaction_id is sent? If I want to pair my customer with the recurring subscription purchase and I use originalTransactionId upon first purchase via an API call on my own server, will that be correct if the user restores purchases on a different Apple device (e.g. their iPad)?

Add a Comment