(StoreKit) Transaction fails with nil error when subscription offer is successfully redeemed for a subscribed user

Originator:dev
Number:rdar://50129954 Date Originated:23.04.2019
Status:Open Resolved:
Product:StoreKit (macOS) Product Version:
Classification: Reproducible:Always
 
Summary:
There's no reliable and documented way now to verify that subscription offer was redeemed successfully or not. Transaction observer receives failed transaction with vague error on iOS / nil on macOS in case, if user is currently subscribed to subscription plan with same product ID.

Date and time when issue occurred: 23.04.2019 17:24:03 +0300

Steps to Reproduce:
1. Purchase subscription with product ID == X.
2. Transaction observer receives transaction with state == SKPaymentTransactionStatePurchased.
3. While subscription is active, prepare SKPaymentDiscount, add it to SKPayment and initiate a purchase of the product with same product ID == X.

Expected Results:
Transaction observer either:
a) receives transaction with state SKPaymentTransactionStatePurchased or 
b) receives transaction with state SKPaymentTransactionStateFailed and an error clearly indicating that the offer was redeemed successfully.
Also transaction.payment.paymentDiscount should not be nil.

Actual Results:
Transaction observer receives transaction with state == SKPaymentTransactionStateFailed with error == nil and transaction.payment.paymentDiscount == nil.

Version/Build:
Purchases were tested in sandbox environment.

Configuration:
iMac15,1 macOS 10.14.4 (18E226)
Xcode Version 10.2.1 (10E1001)

Comments

One more observation: system popover during offer purchase says that discounted subscription "starts now", but actually we see a transaction with "promotional_offer_id" in receipt only upon following renewal.


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!