We've detected that your app is not acknowledging all in-app purchases... Android IAP Acknowledgment

I got this issue with Unity IAP 2.2.1. Unity 2020.1.7f1
I see this on my Google Console Inbox page.
6723502--773500--Screenshot 2021-01-14 at 11.35.13.png
We’ve detected that your app is not acknowledging all in-app purchases or subscriptions. Starting with Billing Library 2.0, all purchases must be acknowledged within three days or they will be automatically refunded.
앱에 Google Play 결제 라이브러리 통합  |  Google Play's billing system  |  Android Developers

Seems like most (almost all of the IAPs) are working well. But sometimes they don’t. Two people contacted me recently with this problem. The game takes money but content in the game is not purchased.
Then, after 3 days, money refunded, players buy the item again and it works.

I don’t really know where to look, because Unity does everything automatically.
Does anyone have the same problem?

This is a known issue that we are working on. Are you using the method ConfirmPendingPurchase by chance?

I’m also having trouble with many purchases going into refund.
Do you mean that if I use ConfirmPendingPurchase I won’t have this problem?
Is this going to be fixed in the next version of Unity IAP 2.2.1?

No, but you do need to upgrade to IAP 2.2.6 where this issue is addressed.

I updated to IAP 2.2.6, but everything is refund since the end of December still.

Is this a bug that affects all people using Unity IAP 2.2.1? Is there any other reason for this?

Yes, it won’t fix previous purchases, only new ones.

I have updated the app, IAP is 2.2.6.
I tried to make a purchase myself, but it was refunded; before late December it was processed normally.

What is the cause?
All other purchases are still being refunded. I’m at a loss.

Unity 2019.4.18
UnityIAP Button
UnityIAP 2.2.6

Hello @szmt3 ,

Can you give us more details please! We’d like to help you investigate.

Which version of com.unity.purchasing (in Package Manager) do you have installed?

Also, what kind of product type is causing you problems? A consumable, a non-conusmable or a subscription?

Please send us any logs you can!

Thanks

Also, please try with IAP 2.2.7 (Asset version) and In App Purchasing library 2.2.2 (Package Manager). We addressed the issue of auto-refunds (hopefully!)

Thanks for the reply.

a non-conusmable (Remove ads and add features)
IAP 2.2.6
In App Purchasing library 2.2.2

And I tested again with internal test.
But was refunded after just 3 days.

IAP 2.2.7 In App Purchasing library 2.2.2

I can send you the URL of the internal test version, but now, I disabled the purchase.
iOS is well.

I have contacted the Google play console.
They replied that it was a matter of Acknowledge.

Please provide the device logs. Place Debug.Log statements in all the IAP callbacks and purchasing methods that you are using so we can debug the issue. The logs will contain the Debug.Log statements (and will confirm the IAP version)

I’ve been getting a similar issue also where the purchase is completed but then it is getting refunded by google. In the code for IAPListener it shows:

[code=CSharp]public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
        {
            Debug.Log(string.Format("IAPListener.ProcessPurchase(PurchaseEventArgs {0} - {1})", e,
                e.purchasedProduct.definition.id));

            onPurchaseComplete.Invoke(e.purchasedProduct);

            return (consumePurchase) ? PurchaseProcessingResult.Complete : PurchaseProcessingResult.Pending;
        }

[/code]

My IAP is a non-consumable so I have ‘consumePurchase’ set to false. In which case it only responds with Pending rather than complete… which I’m assuming may be my problem. Maybe I am misunderstanding the ‘consumePurchase’ toggle and should be using true for that?

Correct. That toggle will likely be removed in the future. It’s not related to product type, but product status. If you leave a product in Pending, it will eventually be refunded.

Hey Jeff! If I understand correctly, I always must return PurchaseProcessingResult.Complete inside function ProcessPurchase?
No matter if I have consumable or non-consumable items? It wont consume item then? So old logic changed?
My old code had similar toggle, and it worked before. But now I get refunded purchases after 3 days with non-consumable items.

Waiting for answer :slight_smile:

Nothing has changed. Unless you are using server-side receipt validation, you always return Complete from ProcessPurchase, as always.

Hmm, I spent some time and re-checked IAP demo and other stuff…
Its really weird. For non-consumable purchases I returned Pending status. and on next app launch IAP automatically invoke ProcessPurchase for that items and I successfully “restored” purchased items in that way.
This stuff worked great in last year and I had no issues with it.
This year I updated IAP libraries because I was needed Google Play Billing library v3 and seems, now my old logic is not correct.
So, sorry for dumb question:
To remember what player purchased, now I have to locally store some stuff and on app restart retrieve it and “refresh” purchased things?
I dont have any server side integration.

So I can loop through all available items and check its receipt inside OnInitialized func?

Yes