【问题标题】:Google Play Billing v5 - Get a product's priceGoogle Play Billing v5 - 获取产品价格
【发布时间】:2022-08-23 03:51:56
【问题描述】:

在 v4 中,我曾经有 SkuDetails.price 来获取产品的价格,但现在它在 v5 中的新 ProductDetails 中不再可用。

在这个新版本中如何获得产品的价格?

标签: in-app-billing android-billing play-billing-library


【解决方案1】:

当您致电getSubscriptionOfferDetails 时,它会返回可供订阅产品购买的优惠。然后您可以致电getPricingPhases() 获取定价阶段列表。每个定价阶段对象都有一个getFormattedPrice() 调用以获取报价的定价短语的价格 (https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.PricingPhase)

【讨论】:

【解决方案2】:

您必须检查可用产品

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.")
                }
            }
        }
    }

【讨论】:

    【解决方案3】:

    我使用以下代码获取价格详细信息。

    私人无效查询产品(){

        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 和未来的读者有用为什么你会这样做
    猜你喜欢
    • 2022-08-22
    • 2022-06-16
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    相关资源
    最近更新 更多