Sye*_*yex 13 android in-app-billing google-play-services
最近,我将我的一个应用程序迁移到了 Google Play In-App Billing v3。自发布以来,我仅在三星设备上收到了一些崩溃报告,这些报告都与BillingClient.onBillingServiceDisconnected()被调用有关。
当前代码如下所示:
val billingClient = BillingClient.newBuilder(context)
.setListener(updatedListener)
.enablePendingPurchases()
.build()
billingClient.startConnection(
object : BillingClientStateListener {
override fun onBillingSetupFinished(billingResult: BillingResult) {
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
// The billing client is ready. You can query purchases here.
querySkuDetails()
}
}
override fun onBillingServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
initBilling() // all code here is wrapped in this method
}
}
)
Run Code Online (Sandbox Code Playgroud)
在那里我显然重新初始化BillingClient并startConnection()在错误情况下再次调用。崩溃然后是
java.lang.IllegalStateException:
at android.os.Parcel.createException (Parcel.java:2096)
at android.os.Parcel.readException (Parcel.java:2056)
at android.os.Parcel.readException (Parcel.java:2004)
at android.app.IActivityManager$Stub$Proxy.registerReceiver (IActivityManager.java:5557)
at android.app.ContextImpl.registerReceiverInternal (ContextImpl.java:1589)
at android.app.ContextImpl.registerReceiver (ContextImpl.java:1550)
at android.app.ContextImpl.registerReceiver (ContextImpl.java:1538)
at android.content.ContextWrapper.registerReceiver (ContextWrapper.java:641)
at com.android.billingclient.api.zze.zza (zze.java:5)
at com.android.billingclient.api.zzd.zza (zzd.java:5)
at com.android.billingclient.api.BillingClientImpl.startConnection (BillingClientImpl.java:58)
at de.memorian.gzg.presentation.base.IAPHelper.initBilling (IAPHelper.java:40)
at de.memorian.gzg.presentation.base.IAPHelper$initBilling$1.onBillingServiceDisconnected (IAPHelper.java:53)
at com.android.billingclient.api.BillingClientImpl$zza.onServiceDisconnected (BillingClientImpl.java:11)
at android.app.LoadedApk$ServiceDispatcher.doConnected (LoadedApk.java:2060)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run (LoadedApk.java:2099)
at android.os.Handler.handleCallback (Handler.java:883)
at android.os.Handler.dispatchMessage (Handler.java:100)
at android.os.Looper.loop (Looper.java:237)
at android.app.ActivityThread.main (ActivityThread.java:7857)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1076)
Caused by: android.os.RemoteException:
at com.android.server.am.ActivityManagerService.registerReceiver (ActivityManagerService.java:16726)
at android.app.IActivityManager$Stub.onTransact (IActivityManager.java:2250)
at com.android.server.am.ActivityManagerService.onTransact (ActivityManagerService.java:3357)
at android.os.Binder.execTransactInternal (Binder.java:1021)
at android.os.Binder.execTransact (Binder.java:994)
Run Code Online (Sandbox Code Playgroud)
我想知道我做错了什么onBillingServiceDisconnected(),所以我用谷歌搜索了一段时间,但没有找到任何明确的建议// implement your own retry logic。这就是例如谷歌所说的。这里的重试逻辑究竟是什么?正如您在堆栈跟踪调用中看到的那样startConnection(),正如谷歌的评论所建议的那样,导致崩溃。谷歌在这里说我应该忽略它,因为 Play 服务onBillingSetupFinished()最终会调用。
你是如何处理这个案子的?
没有找到我的问题的具体答案如何处理失败案例。我重构了我的代码,所以我基本上忽略了调用onBillingServiceDisconnected(),只向用户显示错误消息。
现在每次尝试购买的电话都会检查是否
BillingClient 被初始化BilligClient 是 ready只有在这些成功之后才尝试进行购买。
以前,我在 app init 上做过上述所有操作。如果连接失败,现在,我将在用户再次单击购买项目时重试(使用 try catch)。这可能无法解决崩溃问题,但至少可以为用户提供更好的体验和控制。
| 归档时间: |
|
| 查看次数: |
1624 次 |
| 最近记录: |