前段时间,我在一个Flutter应用程序(Android和iOS)中添加了应用内购买功能,通过从code lab中愉快地复制和粘贴代码来实现。
它在生产环境中运行良好。然而,突然之间,在VS Code中运行Android构建时,连续快速打印出以下两条消息:
在消息被记录数百次后,偶尔会出现以下的
这些消息的问题在于设备发热,动画变得卡顿,表明
现在的问题是,是什么导致了这个问题?如何解决?
发生的地方: 代码实验室建议创建一个类似于
W/BillingClient(25973): Billing service disconnected.
D/InAppPurchasePlugin(25973): Tried to call onBillingSetupFinished multiple times.
在消息被记录数百次后,偶尔会出现以下的
DeadObjectException
异常:W/BillingClient(25973): Exception while checking if billing is supported; try to reconnect
W/BillingClient(25973): android.os.DeadObjectException
W/BillingClient(25973): at android.os.BinderProxy.transactNative(Native Method)
W/BillingClient(25973): at android.os.BinderProxy.transact(BinderProxy.java:595)
W/BillingClient(25973): at com.google.android.gms.internal.play_billing.zzh.zzo(com.android.billingclient:billing@@6.0.1:2)
W/BillingClient(25973): at com.google.android.gms.internal.play_billing.zzc.zzq(com.android.billingclient:billing@@6.0.1:5)
W/BillingClient(25973): at com.android.billingclient.api.zzaf.zza(com.android.billingclient:billing@@6.0.1:13)
W/BillingClient(25973): at com.android.billingclient.api.zzac.call(Unknown Source:2)
W/BillingClient(25973): at java.util.concurrent.FutureTask.run(FutureTask.java:264)
W/BillingClient(25973): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
W/BillingClient(25973): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
W/BillingClient(25973): at java.lang.Thread.run(Thread.java:1012)
这些消息的问题在于设备发热,动画变得卡顿,表明
BillingClient
或InAppPurchasePlugin
在一个无限循环中忙碌。现在的问题是,是什么导致了这个问题?如何解决?
发生的地方: 代码实验室建议创建一个类似于
IAPConnection
的类。// Gives the option to override in tests.
class IAPConnection {
static InAppPurchase? _instance;
static set instance(InAppPurchase value) {
_instance = value;
}
static InAppPurchase get instance {
_instance ??= InAppPurchase.instance;
return _instance!;
}
}
在第一次访问InAppPurchase.instance;
之后不久,这些消息开始显示出来。即使in_app_purchase的api没有被使用。
有趣的是,IAPConnection.instance.purchaseStream
的onError()
回调函数没有被调用。
此外,在生产环境中,应用内购买正常工作,甚至在调试模式下,在消息显示之前,购买会被正确恢复。
这在一个物理的Android 13设备上发生,使用的是in_app_purchase包3.1.5到3.1.10和Flutter 3.13.6。
非常感谢任何关于导致此问题的原因、解决方法或修复方法的建议。谢谢。