Reputation: 529
My application has a single one-time non-consumable IAP to turn off advertisement. I'm trying to provide a "Restore Purchase" option for my application. In the event a user uninstalls the application or migrates to a new device, they have an option to recover their one-time past purchase.
My app is following the purchase flow described within Google's documentation https://developer.android.com/google/play/billing/integrate
I've looked for examples to restore a past purchase for a different device, but all the examples I've found are out dated referencing the AIDL methods.
I've looked at methods, BillingClient.queryPurchases()
and BillingClient.queryPurchaseHistoryAsync()
. queryPurchaseHistoryAsync()
give a list of PurchaseHistoryRecord
s, for all past purchases including canceled purchases, but does not provide the purchase status to determine if any of those are a completed or pending purchase.
In contrast, queryPurchases()
will give a list of purchases and their status, but only for the device. It returns an empty list if a user made the IAP on a different device.
I do not have a backend as I'm an independent developer with limited resources, so my app must be self-contained.
Any help is appreciated. Thanks.
Upvotes: 2
Views: 2038
Reputation: 529
So I learned that queryPurchases()
is cached locally on your device, but is updated when you call queryPurchaseHistoryAsync()
I discovered from this Stackoverflow answer here
So my solution, is when wanting to restore a purchase on a new device, or a fresh install of my app. Call queryPurchaseHistoryAsync()
Then in the callback of onPurchaseHistoryResponse()
call queryPurchases()
and look within the List<Purchase>
from the PurchasesResult
for the purchase status of any of the user's past purchases.
If there's an expected purchase your app can grant the entitlements of their past purchase.
Upvotes: 4
Reputation: 4127
Purchases are linked to the device Google account, if the user installs the app and uses the same account on the second device then BillingClient.queryPurchases()
will return that he owns the purchased IAP
If he wants to use a different Google account then he will have to buy the item again.
Upvotes: 0