I have an app where I've been offering auto renewable in-app-subscriptions for a while without problems. Now I'm trying to add in-app-purchases, which also works, but now I experienced "ghost transactions" when trying to verify the receipt in the backend.
I have non-consumable products: product1
, product2
, product3
and auto-renewable subscriptions: subscriptionmonthly
, subscriptionyearly
I'm using a sandbox testing user. I purchased product1
, product2
and subscriptionmonthly
.
What I do is that I run SKPaymentQueue restoreCompletedTransactions
in the app and then I log all the transactions. I get back subscriptionmonthly
, product1
and product2
as expected.
All transactions have the same receipt data, which I send to the verifyReceipt (sandbox) endpoint. I get back a valid JSON response and I see subscriptionmonthly
, product1
and product2
as expected inside the response.
Two days later I do the same and I still get back subscriptionmonthly
, product1
and product2
in the app. When I send the receipt to verifyReceipt
I get a valid JSON response again. Inside in_app
and latest_receipt_info
I can see subscriptionmonthly
, however I do not see the product1
or product2
, so they have somehow vanished. I tried to purchase product1
in the app again, and the IAP purchase dialog says that you've already purchased this product. If I press OK and take the receipt again and send to verifyReceipt
, there is still no product1
in the response. If I now purchase another product product3
, and send the receipt to verifyReceipt
, I correctly get product3
back in the response, but still no product1
or product2
.
Is there any way I could be doing something wrong here, or is this just a known issue with the Sandbox that we cannot really trust what verifyReceipt
gives us here?
Note that I'm using react-native-iap however I believe it shouldn't matter because in the app I do see all the transactions.