购买完成后 UI 元素更新不起作用 - Google 计费客户端 4
Posted
技术标签:
【中文标题】购买完成后 UI 元素更新不起作用 - Google 计费客户端 4【英文标题】:UI element updates does not work when purchase completed - Google billing client 4 【发布时间】:2021-08-29 05:16:52 【问题描述】:我已改用 Google 计费客户端 4.0 库。从那以后购买完成后,我的 ui 元素更新不起作用。
我试图检查它们是否不再在 UThread 中或其他什么,但它仍然无法正常工作。
billingClient!!.acknowledgePurchase(
acknowledgePurchaseParams
) billingResult ->
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK)
saveSubscription(purchase.purchaseToken, sku)
mainAct?.runOnUiThread
Toast.makeText(context , "Vásárlás sikeres", Toast.LENGTH_SHORT)
.show()
delegate?.purchaseSuccess(
actProduct,
prevProduct,
purchase.purchaseToken
)
确认完成后,我的 UI 元素应该会更新。应该启用一个菜单项,并且在购买页面中,一个文本字段应该显示该项目已购买。代码正在运行,但 UI 元素未更新。
一旦我移动到不同的片段,菜单项就会变为启用,所以在我看来,UI 没有刷新。
在代码中 mainAct 是 MainActivity 的上下文。
有什么想法吗?
代码在 Billing 库 3.0.3 上正常运行,并且根本不需要 runOnUIThread。
这个库仍然有奇怪的行为。在我的用户登录应用程序并从登录页面转到第一个片段的同时,我正在设置帐单。这个片段有一个 recyclerview,这个 recycler 视图充满了来自网络的数据。回收器视图随机不显示元素,即使它们已加载并且适配器已正确更新。
您移动到另一个片段并返回回收站视图正确显示数据。
正如我所说,第一次调用计费服务器时,UIThread 被搞砸了,即使更新了数据标签或菜单,也没有显示更新。
所以这个库肯定有问题。
有什么想法吗?
【问题讨论】:
【参考方案1】:这种行为有点奇怪。文档说大多数计费库函数可以从任何线程运行。只有少数需要在 UIThread 上运行。 AcknowlegdePurchase 应该在 AnyThread 上运行。
我已将 Toast 放入 runOnUIThread 和委托函数内部,我还将所有命令放入 runOnUIThread 闭包中。
现在它可以在计费库 3.0.3 上使用。但是文档没有说明任何这些变化,所以真的不清楚为什么两个库之间的行为发生了如此大的变化。
【讨论】:
以上是关于购买完成后 UI 元素更新不起作用 - Google 计费客户端 4的主要内容,如果未能解决你的问题,请参考以下文章
更新Mac应用程序,SwiftyStoreKit后恢复购买不起作用
更新到 Xcode 10 后 XCUITest 的测试目标似乎不起作用
编辑 WorkItem 不起作用 - UI 未更新 - VS2019 ADOS 2020