I am perplexed.
According to Apple's documenation here:
Receipts for in-app purchases of non-renewing subscriptions are retained in the receipt permanently. It says so in the above link as:
In-App Purchase Receipt
The receipt for an in-app purchase.
ASN.1 Field Type 17
ASN.1 Field Value SET of in-app purchase receipt attributes
JSON Field Name in_app
JSON Field Value array of in-app purchase receipts
In the JSON file, the value of this key is an array containing all in-app purchase receipts. In the ASN.1 file, there are multiple fields that all have type 17, each of which contains a single in-app purchase receipt.
The in-app purchase receipt for a consumable product is added to the receipt when the purchase is made. It is kept in the receipt until your app finishes that transaction. After that point, it is removed from the receipt the next time the receipt is updated—for example, when the user makes another purchase or if your app explicitly refreshes the receipt.
The in-app purchase receipt for a non-consumable product, auto-renewable subscription, non-renewing subscription, or free subscription remains in the receipt indefinitely.
Over the past few months of testing my app, this has indeed been the case. But now, the Sandbox environment is providing a the receipt only in the receipt resulting from the purchase transaction. Refreshing the app receipt no longer shows the in-app purchases.
What gives? Has there been a reversal of this policy or else what am I doing wrong?
The purchase process works fine; I finish the transaction and check the receipt. The recepit has the in-app purchase. However, if I issue a StoreKit request to refresh the receipt, the refreshed receipt doesn't show ANY of the non-renewable subscription purchases.
Any clues?
Thanks
Stu
I filed a Developer Tech Support request to request an explanation about which of the two referenced documents were correct and whether there had been a change of poilcy regarding which one was correct.
The initial response was that the first document was correct - non-renewing subscriptions were persisted in the app receipt. The person handling my reqest asked for some validation that dumped out all fields in the receipt which I provided. Again, showing that the purchases of non-renewing subsctiptions were not persisted in the receipt from the Sandbox.
First thing today I was asked to file a bug report as the developer handing my DTS confirmed what i was seeing.
Several hours later I got a follow up response that the change I was seeing was the result of a "bug fix" to the store logic and that now the SECOND document is considered the right answer. Developers are responsible for persisting non-renewing subscription status themselves and that the app receipt does not provide (as it did) a persisted record of the purchase of a non-renewing subscription.
The developer handling the case expressed surprise at this change but had confirmed the change with the AppStore development team.
So at least I now know what I have to do... although for the last three months of development after adding in-app purchases for this app using non-renewing subscriptions, the receipt information persisted all purchases.
No fuss, no muss and no annoucement of the change.
I am thankful that I learnt this BEFORE my app got approved for production and then had to deal with a bunch of unhappy customers.
Hopefully this thread saves others from the same headache.
Perhaps the App Store development team has a change of heart and reinstates this behavior but clearly there is still (without clarity across all doucment sources) a risk that the "bug" gets "fixed" again.
Stu