Google Play 计费 v5 - 获取产品价格

11
在v4版本中,我曾使用SkuDetails.price来获取产品的价格,但在v5中的新ProductDetails中不再可用。
如何在这个新版本中获取产品的价格?

这个回答解决了你的问题吗?在Android-billing-5.0中获取ProductDetails价格 - Tyler V
3个回答

11

这只适用于订阅吗?那应用内产品呢? - Jay N
6
有一个 OnetimePurchaseOfferDetails 对象,可以调用 getFormattedPrice() 方法获取格式化后的价格信息。具体信息请查阅:https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.OneTimePurchaseOfferDetails。 - misobean

3

你需要检查可用产品

fun getAvailableProducts() {
    Timber.d("!!! Getting available products to buy ...")

    val queryProductDetailsParams =
        QueryProductDetailsParams.newBuilder()
            .setProductList(
                listOf(
                    QueryProductDetailsParams.Product.newBuilder()
                        .setProductId(SKU_SUBSCRIBE_MONTHLY)
                        .setProductType(BillingClient.ProductType.SUBS)
                        .build(),
                    QueryProductDetailsParams.Product.newBuilder()
                        .setProductId(SKU_SUBSCRIBE_YEARLY)
                        .setProductType(BillingClient.ProductType.SUBS)
                        .build()
                ))
            .build()

    billingClient.queryProductDetailsAsync(queryProductDetailsParams) {
            billingResult,
            productDetailsList ->
        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
            availableProducts.tryEmit(productDetailsList)
            getPrices(productDetailsList)
        } else {
            Timber.d("!!!Error getting available Products to buy: ${billingResult.responseCode} ${billingResult.debugMessage}")
        }
    }
}

然后

    private fun getPrices(productDetailsList: MutableList<ProductDetails>) {
        productDetailsList.forEach{
            when (it.productId) {
                SKU_SUBSCRIBE_MONTHLY -> {
                    currency.tryEmit(it.subscriptionOfferDetails?.get(0)?.pricingPhases!!.pricingPhaseList[0]?.priceCurrencyCode.toString())
                    monthlyPrice.tryEmit(it.subscriptionOfferDetails?.get(0)?.pricingPhases!!.pricingPhaseList[0]?.formattedPrice.toString())
                    Timber.d("!!!! $it.")
                }
                SKU_SUBSCRIBE_YEARLY -> {
//                    currency.tryEmit(it.subscriptionOfferDetails?.get(0)?.pricingPhases!!.pricingPhaseList[0]?.priceCurrencyCode.toString())
                    yearlyPrice.tryEmit(it.subscriptionOfferDetails?.get(0)?.pricingPhases!!.pricingPhaseList[0]?.formattedPrice.toString())
                    Timber.d("!!!! $it.")
                }
            }
        }
    }

0
我使用以下代码获取价格细节。
私有void查询产品() {
    QueryProductDetailsParams queryProductDetailsParams
            = QueryProductDetailsParams.newBuilder().setProductList(
                    ImmutableList.of(QueryProductDetailsParams.Product.newBuilder()
                            .setProductId("your_product_id")
                            .setProductType(BillingClient.ProductType.INAPP).build()))
            .build();

    billingClient.queryProductDetailsAsync(
            queryProductDetailsParams,

            new ProductDetailsResponseListener() {
                @Override
                public void onProductDetailsResponse(@NonNull BillingResult billingResult, @NonNull List<ProductDetails> list) {
                    if(!list.isEmpty()){

                        productDetails = list.get(0);
                        itemdesc.setText(productDetails.getName());
                        itemprice.setText(productDetails.getOneTimePurchaseOfferDetails().getFormattedPrice());

                        itemprice.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                makePurchase();
                            }
                        });

                    }else {

                        Log.i("playsresponse", "no response from google play");
                    }
                }
            }
    );

请确保在您的代码周围添加解释,以使其对OP和未来读者有用,让他们了解为什么要这样做。 - Can O' Spam
这对订阅价格不起作用,只适用于“INAPP”购买。"尝试调用空对象引用上的'java.lang.String com.android.billingclient.api.ProductDetails$OneTimePurchaseOfferDetails.getFormattedPrice()'虚拟方法"。 - Bruno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接