"idiomatic Kotlin" 库 billing.ktx 有什么用?

What "idiomatic Kotlin" does the library billing.ktx facilitate?

在研究我的问题的答案时 here 我发现(经过几天非常令人沮丧的工作)对 kotlin 计费库“billing.ktx”的引用,几个开发者页面声称

contains Kotlin extensions and coroutines support that enable you to write idiomatic Kotlin when using Google Play's billing system

但既没有提供详细信息也没有提供更多信息的链接。 Play 计费示例 "Classy Taxi" and "TrivialDrive" 已被重写为使用 Kotlin,但几乎没有“惯用的 Kotlin”,当然也没有使用协程,也不使用这个库。他们现在两岁了,在这个快速发展的舞台上暴露了他们的年龄。

我的问题是这个库在惯用的 Kotlin 甚至协程支持方面具体提供了什么?在使用这个库之前,我在一些计费客户端功能方面取得了一些进展(如所引用的问题所示),但我看不出使用它有什么不同。更具体地说,“launchBillingFlow”看起来无法转换,但它是吗?

只需链接到某处以查找信息就足够了。为什么很难为计费客户端找到超过 class 个定义?

我找不到文档。这个答案中的所有内容都来自于查看 billing-ktx 当我将对此库的依赖项添加到我的项目时出现的 aar。

这个库看起来很小。它在 BillingClient 上提供了三个新的“结果”类 以及四个扩展函数,以用 suspend funs 替换基于回调的代码。

package com.android.billingclient.api

public suspend fun BillingClient.acknowledgePurchase(params: AcknowledgePurchaseParams): BillingResult { /* compiled code */ }
public suspend fun BillingClient.consumePurchase(params: ConsumeParams): ConsumeResult { /* compiled code */ }
public suspend fun BillingClient.queryPurchaseHistory(skuType: String): PurchaseHistoryResult { /* compiled code */ }
public suspend fun BillingClient.querySkuDetails(params: SkuDetailsParams): SkuDetailsResult { /* compiled code */ }

有了这些,在协程中你可以写:

val result = billingClient.querySkuDetails(params.build())
// you can now access result.billingResult or result.skuDetailsList

而不是像文档中出现的那样:

billingClient.querySkuDetailsAsync(params.build()) { billingResult, skuDetailsList ->
    // Process the result.
}