From e1106920b146f25474898e3d75cb23fbaf39772c Mon Sep 17 00:00:00 2001 From: Nick Leeman Date: Fri, 26 Apr 2024 00:21:30 +0200 Subject: [PATCH] Refactor IAP initialization and purchase handling in iap_android.cpp and IapGooglePlay.java --- extension-iap/src/iap_android.cpp | 14 ++---------- .../java/com/defold/iap/IapGooglePlay.java | 22 ++++--------------- 2 files changed, 6 insertions(+), 30 deletions(-) diff --git a/extension-iap/src/iap_android.cpp b/extension-iap/src/iap_android.cpp index 641ed54..28058fa 100644 --- a/extension-iap/src/iap_android.cpp +++ b/extension-iap/src/iap_android.cpp @@ -1,4 +1,4 @@ -#if defined(DM_PLATFORM_ANDROID) +// #if defined(DM_PLATFORM_ANDROID) #include #include @@ -15,9 +15,7 @@ struct IAP IAP() { memset(this, 0, sizeof(*this)); - m_autoFinishTransactions = true; } - bool m_autoFinishTransactions; dmScript::LuaCallbackInfo* m_Listener; @@ -118,12 +116,6 @@ static int IAP_Finish(lua_State* L) { DM_LUA_STACK_CHECK(L, 0); - if(g_IAP.m_autoFinishTransactions) - { - dmLogWarning("Calling iap.finish when autofinish transactions is enabled. Ignored."); - return 0; - } - luaL_checktype(L, 1, LUA_TTABLE); lua_getfield(L, -1, "state"); @@ -385,8 +377,6 @@ static dmExtension::Result InitializeIAP(dmExtension::Params* params) { IAP_Queue_Create(&g_IAP.m_CommandQueue); - g_IAP.m_autoFinishTransactions = dmConfigFile::GetInt(params->m_ConfigFile, "iap.auto_finish_transactions", 1) == 1; - dmAndroid::ThreadAttacher threadAttacher; JNIEnv* env = threadAttacher.GetEnv(); @@ -406,7 +396,7 @@ static dmExtension::Result InitializeIAP(dmExtension::Params* params) g_IAP.m_SetAccountId = env->GetMethodID(iap_class, "setAccountId", "(Ljava/lang/String;)V"); jmethodID jni_constructor = env->GetMethodID(iap_class, "", "(Landroid/app/Activity;Z)V"); - g_IAP.m_IAP = env->NewGlobalRef(env->NewObject(iap_class, jni_constructor, threadAttacher.GetActivity()->clazz, g_IAP.m_autoFinishTransactions)); + g_IAP.m_IAP = env->NewGlobalRef(env->NewObject(iap_class, jni_constructor, threadAttacher.GetActivity()->clazz)); jni_constructor = env->GetMethodID(iap_jni_class, "", "()V"); g_IAP.m_IAPJNI = env->NewGlobalRef(env->NewObject(iap_jni_class, jni_constructor)); diff --git a/extension-iap/src/java/com/defold/iap/IapGooglePlay.java b/extension-iap/src/java/com/defold/iap/IapGooglePlay.java index 7bc992e..a9d8f56 100644 --- a/extension-iap/src/java/com/defold/iap/IapGooglePlay.java +++ b/extension-iap/src/java/com/defold/iap/IapGooglePlay.java @@ -49,13 +49,11 @@ public class IapGooglePlay implements PurchasesUpdatedListener { private Map products = new HashMap(); private BillingClient billingClient; private IPurchaseListener purchaseListener; - private boolean autoFinishTransactions; private Activity activity; private String accountId; - public IapGooglePlay(Activity activity, boolean autoFinishTransactions) { + public IapGooglePlay(Activity activity) { this.activity = activity; - this.autoFinishTransactions = autoFinishTransactions; billingClient = BillingClient.newBuilder(activity).setListener(this).enablePendingPurchases().build(); billingClient.startConnection(new BillingClientStateListener() { @@ -356,25 +354,13 @@ public class IapGooglePlay implements PurchasesUpdatedListener { } /** - * Handle a purchase. If the extension is configured to automatically - * finish transactions the purchase will be immediately consumed. Otherwise - * the product will be returned via the listener without being consumed. + * Handle a purchase. + * The product will be returned via the listener without being consumed. * NOTE: Billing 3.0+ requires purchases to be acknowledged within 3 days of * purchase unless they are consumed. */ private void handlePurchase(final Purchase purchase, final IPurchaseListener purchaseListener) { - if (this.autoFinishTransactions) { - consumePurchase(purchase.getPurchaseToken(), new ConsumeResponseListener() { - @Override - public void onConsumeResponse(BillingResult billingResult, String purchaseToken) { - Log.d(TAG, "handlePurchase() response code " + billingResult.getResponseCode() + " purchaseToken: " + purchaseToken); - invokeOnPurchaseResultListener(purchaseListener, billingResult, purchase); - } - }); - } - else { - invokeOnPurchaseResultListener(purchaseListener, billingResponseCodeToDefoldResponse(BillingResponseCode.OK), convertPurchase(purchase)); - } + invokeOnPurchaseResultListener(purchaseListener, billingResponseCodeToDefoldResponse(BillingResponseCode.OK), convertPurchase(purchase)); } /**