From ad06de7b9cc3c07a83a4c7099df5d7aef7c52af2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Ritzl?= Date: Mon, 6 Feb 2023 23:11:24 +0100 Subject: [PATCH] Check purchase listener --- .../java/com/defold/iap/IapGooglePlay.java | 28 ++++++++++++++----- game.project | 2 +- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/extension-iap/src/java/com/defold/iap/IapGooglePlay.java b/extension-iap/src/java/com/defold/iap/IapGooglePlay.java index 22c1a36..2ac57b7 100644 --- a/extension-iap/src/java/com/defold/iap/IapGooglePlay.java +++ b/extension-iap/src/java/com/defold/iap/IapGooglePlay.java @@ -243,6 +243,20 @@ public class IapGooglePlay implements PurchasesUpdatedListener { return billingResponseCodeToDefoldResponse(result.getResponseCode()); } + private void invokeOnPurchaseResultListener(IPurchaseListener purchaseListener, int billingResultCode, String purchaseData) { + if (purchaseListener == null) { + Log.w(TAG, "Received billing result but no listener has been set"); + return; + } + purchaseListener.onPurchaseResult(billingResultCode, purchaseData); + } + private void invokeOnPurchaseResultListener(IPurchaseListener purchaseListener, BillingResult billingResult, Purchase purchase) { + invokeOnPurchaseResultListener(purchaseListener, billingResultToDefoldResponse(billingResult), convertPurchase(purchase)); + } + private void invokeOnPurchaseResultListener(IPurchaseListener purchaseListener, BillingResult billingResult) { + invokeOnPurchaseResultListener(purchaseListener, billingResultToDefoldResponse(billingResult), ""); + } + /** * This method is called either explicitly from Lua or from extension code * when "set_listener()" is called from Lua. @@ -306,7 +320,7 @@ public class IapGooglePlay implements PurchasesUpdatedListener { // note: we only call the purchase listener if an error happens if (billingResult.getResponseCode() != BillingResponseCode.OK) { Log.e(TAG, "Unable to consume purchase: " + billingResult.getDebugMessage()); - purchaseListener.onPurchaseResult(billingResultToDefoldResponse(billingResult), ""); + invokeOnPurchaseResultListener(purchaseListener, billingResult); } } }); @@ -329,7 +343,7 @@ public class IapGooglePlay implements PurchasesUpdatedListener { // note: we only call the purchase listener if an error happens if (billingResult.getResponseCode() != BillingResponseCode.OK) { Log.e(TAG, "Unable to acknowledge purchase: " + billingResult.getDebugMessage()); - purchaseListener.onPurchaseResult(billingResultToDefoldResponse(billingResult), ""); + invokeOnPurchaseResultListener(purchaseListener, billingResult); } } }); @@ -348,12 +362,12 @@ public class IapGooglePlay implements PurchasesUpdatedListener { @Override public void onConsumeResponse(BillingResult billingResult, String purchaseToken) { Log.d(TAG, "handlePurchase() response code " + billingResult.getResponseCode() + " purchaseToken: " + purchaseToken); - purchaseListener.onPurchaseResult(billingResultToDefoldResponse(billingResult), convertPurchase(purchase)); + invokeOnPurchaseResultListener(purchaseListener, billingResult, purchase); } }); } else { - purchaseListener.onPurchaseResult(billingResponseCodeToDefoldResponse(BillingResponseCode.OK), convertPurchase(purchase)); + invokeOnPurchaseResultListener(purchaseListener, billingResponseCodeToDefoldResponse(BillingResponseCode.OK), convertPurchase(purchase)); } } @@ -368,7 +382,7 @@ public class IapGooglePlay implements PurchasesUpdatedListener { } } else { - this.purchaseListener.onPurchaseResult(billingResultToDefoldResponse(billingResult), ""); + invokeOnPurchaseResultListener(this.purchaseListener, billingResult); } } @@ -392,7 +406,7 @@ public class IapGooglePlay implements PurchasesUpdatedListener { BillingResult billingResult = billingClient.launchBillingFlow(this.activity, billingFlowParams); if (billingResult.getResponseCode() != BillingResponseCode.OK) { Log.e(TAG, "Purchase failed: " + billingResult.getDebugMessage()); - purchaseListener.onPurchaseResult(billingResultToDefoldResponse(billingResult), ""); + invokeOnPurchaseResultListener(purchaseListener, billingResult); } } @@ -417,7 +431,7 @@ public class IapGooglePlay implements PurchasesUpdatedListener { } else { Log.e(TAG, "Unable to get product details before buying: " + billingResult.getDebugMessage()); - purchaseListener.onPurchaseResult(billingResultToDefoldResponse(billingResult), ""); + invokeOnPurchaseResultListener(purchaseListener, billingResult); } } }); diff --git a/game.project b/game.project index 5a2b8e8..c910dee 100644 --- a/game.project +++ b/game.project @@ -16,7 +16,7 @@ target_sdk_version = 29 [project] title = extension-iap -dependencies = https://github.com/andsve/dirtylarry/archive/master.zip +dependencies#0 = https://github.com/andsve/dirtylarry/archive/master.zip [library] include_dirs = extension-iap