I tried inserting the log where the GoogleBillingResult is being generated and investigating.
When onBillingServiceDisconnected of UnityEngine.Purchasing.BillingClientStateListener is called, onBillingSetupFinished is called next. Response code is success.
That should have completed it, but immediately onBillingServiceDisconnected and onBillingSetupFinished were called again, each time incrementing the number called by one.
At first it was called once, then twice, then three times, then four times, then crashed due to the large number of calls. global reference table overflow.
It seems that the reconnection process after disconnection is not working properly. It looks like you forgot to clear the queue for reconnection processing.
- Display a portion of the log that repeats.
09-12 11:28:57.697 18135 19768 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:28:57.697 18135 19768 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:28:57.697 18135 19768 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:28:57.697 18135 19768 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:28:57.697 18135 19768 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:28:57.697 18135 19768 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:28:58.994 18135 18135 I Unity : onBillingServiceDisconnected
09-12 11:28:58.994 18135 18135 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingServiceDisconnected()
09-12 11:28:58.994 18135 18135 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:28:58.994 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:28:58.994 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:28:58.994 18135 18135 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:28:59.835 18135 20039 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:28:59.835 18135 20039 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:28:59.835 18135 20039 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:28:59.835 18135 20039 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:28:59.835 18135 20039 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:28:59.835 18135 20039 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:28:59.835 18135 20039 I Unity :
09-12 11:28:59.848 18135 20038 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:28:59.848 18135 20038 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:28:59.848 18135 20038 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:28:59.848 18135 20038 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:28:59.848 18135 20038 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:28:59.848 18135 20038 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:00.144 18135 18135 I Unity : onBillingServiceDisconnected
09-12 11:29:00.144 18135 18135 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingServiceDisconnected()
09-12 11:29:00.144 18135 18135 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:00.144 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:00.144 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:00.144 18135 18135 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:00.144 18135 18135 I Unity :
09-12 11:29:00.156 18135 18135 I Unity : onBillingServiceDisconnected
09-12 11:29:00.156 18135 18135 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingServiceDisconnected()
09-12 11:29:00.156 18135 18135 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:00.156 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:00.156 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:00.156 18135 18135 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:00.883 18135 19820 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:29:00.883 18135 19820 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:29:00.883 18135 19820 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:00.883 18135 19820 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:00.883 18135 19820 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:00.883 18135 19820 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:00.883 18135 19820 I Unity :
09-12 11:29:00.885 18135 20151 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:29:00.885 18135 20151 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:29:00.885 18135 20151 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:00.885 18135 20151 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:00.885 18135 20151 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:00.885 18135 20151 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:00.885 18135 20151 I Unity :
09-12 11:29:00.885 18135 19768 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:29:00.885 18135 19768 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:29:00.885 18135 19768 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:00.885 18135 19768 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:00.885 18135 19768 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:00.885 18135 19768 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:01.133 18135 18135 I Unity : onBillingServiceDisconnected
09-12 11:29:01.133 18135 18135 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingServiceDisconnected()
09-12 11:29:01.133 18135 18135 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:01.133 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:01.133 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:01.133 18135 18135 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:01.133 18135 18135 I Unity :
09-12 11:29:01.147 18135 18135 I Unity : onBillingServiceDisconnected
09-12 11:29:01.147 18135 18135 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingServiceDisconnected()
09-12 11:29:01.147 18135 18135 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:01.147 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:01.147 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:01.147 18135 18135 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:01.147 18135 18135 I Unity :
09-12 11:29:01.158 18135 18135 I Unity : onBillingServiceDisconnected
09-12 11:29:01.158 18135 18135 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingServiceDisconnected()
09-12 11:29:01.158 18135 18135 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:01.158 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:01.158 18135 18135 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:01.158 18135 18135 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:01.851 18135 19865 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:29:01.851 18135 19865 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:29:01.851 18135 19865 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:01.851 18135 19865 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:01.851 18135 19865 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:01.851 18135 19865 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:01.851 18135 19865 I Unity :
09-12 11:29:01.852 18135 19866 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:29:01.852 18135 19866 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:29:01.852 18135 19866 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:01.852 18135 19866 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:01.852 18135 19866 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:01.852 18135 19866 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:01.852 18135 19866 I Unity :
09-12 11:29:01.853 18135 19819 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:29:01.853 18135 19819 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:29:01.853 18135 19819 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:01.853 18135 19819 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:01.853 18135 19819 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:01.853 18135 19819 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 11:29:01.853 18135 19819 I Unity :
09-12 11:29:01.853 18135 20039 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 11:29:01.853 18135 20039 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 11:29:01.853 18135 20039 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 11:29:01.853 18135 20039 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 11:29:01.853 18135 20039 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 11:29:01.853 18135 20039 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
Another strange thing is that onBillingSetupFinished may return BillingUnavailable (Google Play In-app Billing API version is less than 3).
Since I am using UnityIAP 4.9.3, Google Play Billing Library should be 5 or later, but what is the cause of this error?
09-12 11:30:35.545 18135 19819 I Unity : onBillingSetupFinished : code = BillingUnavailable, debugMessage = Google Play In-app Billing API version is less than 3
Additionally, if a billing server disconnect occurs immediately after UnityPurchasing.Initialize, neither OnInitialized nor OnInitializeFailed nor any callback functions you registered for SetServiceDisconnectAtInitializeListener or SetQueryProductDetailsFailedListener will be called. I waited for about 5 minutes.
09-12 13:13:39.233 5812 5841 D NativeDebugLog: IAPStoreListener : Initialize
09-12 13:13:40.301 5812 6128 I Unity : onBillingSetupFinished : code = Ok, debugMessage =
09-12 13:13:40.301 5812 6128 I Unity : UnityEngine.Purchasing.BillingClientStateListener:onBillingSetupFinished(AndroidJavaObject)
09-12 13:13:40.301 5812 6128 I Unity : System.Reflection.RuntimeMethodInfo:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
09-12 13:13:40.301 5812 6128 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
09-12 13:13:40.301 5812 6128 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, IntPtr)
09-12 13:13:40.301 5812 6128 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
09-12 13:13:40.586 5812 5812 W BillingClient: Billing service disconnected.
09-12 13:13:40.587 5812 6145 W BillingClient: querySkuDetailsAsync got a remote exception (try to reconnect).
09-12 13:13:40.587 5812 6145 W BillingClient: android.os.DeadObjectException
09-12 13:13:40.587 5812 6145 W BillingClient: at android.os.BinderProxy.transactNative(Native Method)
09-12 13:13:40.587 5812 6145 W BillingClient: at android.os.BinderProxy.transact(Binder.java:1129)
09-12 13:13:40.587 5812 6145 W BillingClient: at com.google.android.gms.internal.play_billing.zzh.zzp(com.android.billingclient:billing@@5.1.0:2)
09-12 13:13:40.587 5812 6145 W BillingClient: at com.google.android.gms.internal.play_billing.zzc.zzl(com.android.billingclient:billing@@5.1.0:7)
09-12 13:13:40.587 5812 6145 W BillingClient: at com.android.billingclient.api.BillingClientImpl.zzn(com.android.billingclient:billing@@5.1.0:13)
09-12 13:13:40.587 5812 6145 W BillingClient: at com.android.billingclient.api.zzr.call(Unknown Source:9)
09-12 13:13:40.587 5812 6145 W BillingClient: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
09-12 13:13:40.587 5812 6145 W BillingClient: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
09-12 13:13:40.587 5812 6145 W BillingClient: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
09-12 13:13:40.587 5812 6145 W BillingClient: at java.lang.Thread.run(Thread.java:764)
And even though the initialization is not completed, onBillingServiceDisconnected and onBillingSetupFinished repeat and crash.
Is there a problem with Unity’s In App Purchasing package? Or, is it exist how to resolve it by us?