StephenVinouze/KinApp

How do we use the launch(ui) lines?

Opened this issue · 1 comments

launch(UI) { val products = billingManager.fetchProductsAsync(<your_products_id_here>, KinAppProductType.INAPP).await() }
will allow me to get a price for a donation (an IAP) but no way to call it

I tried:

suspend fun getProducts(){ val products = billingManager.fetchProductsAsync(skuList, KinAppProductType.INAPP).await() val price = products?.get(0)?.price }

but I can not actually call the function this may be due to my novice level coding, never really delt with suspended functions (yeah I know I would define price elsewhere and then give it the value in the function, need to learn to call the function first lol)

also

suspend fun consumeDonation(){ val success = billingManager.consumePurchaseAsync("my.purchse.id").await() }
again no idea how to call but also "my.purchse.id" or skuList[0] wont work as they are type string and it wants KinnAppPurchase .... how do I get that?
(need to consume the item as its a donation only so can be done again if the user wants)

I am not one to sit around waiting for a response...

The first part for getting price I have resolved like this:

override fun onBillingReady() { // From this point you can use the Manager to fetch/purchase/consume/restore items Log.d("IAP","READY") GlobalScope.launch(Dispatchers.Main, CoroutineStart.DEFAULT) { products = billingManager.fetchProductsAsync(skuList, KinAppProductType.INAPP).await()?.toMutableList() donateTest.text="Donate :"+ (products?.get(0)?.price ?:"unknown Amount" ) Toast.makeText(applicationContext, "Fetched " + products?.size + " products", Toast.LENGTH_LONG).show() if (products?.isNotEmpty() == true){ Log.d("IAP","list not empty") } } }

I am sure this is not the right way lol but it does work and the button is updated with the price ! yay!

still no idea on how to get the KinAppPurchase to be able to consume it

Edit I think I have sussed the consume issue, my code now reads:

KinAppPurchaseResult.SUCCESS -> { // Purchase successful with a non-null KinAppPurchase object. // You may choose to consume this item right now if you want to be able to re-buy it purchase?.let { purchases?.add(purchase) GlobalScope.launch(Dispatchers.Main, CoroutineStart.DEFAULT) { if(purchase.productId==skuList[0]){ val success = billingManager.consumePurchaseAsync(purchase).await() toast("consume :"+success) } } } }

I have my developer payload set so I can make test purchases (the test id provided stopped working for some reason but was able to test with mine) I was able to buy and have it consumed and be able to re-buy.

Shall not close the issue as I am curious if there is a better way (got a feeling I have done it somewhat hacky) if this is perfectly fine though then please close the issue