如何从应用程序订阅中获取订阅价格

时间:2019-11-08 07:44:08

标签: android in-app-subscription

我已经在Google Play控制台帐户中创建了每月订阅。

现在,我想以编程方式根据设备区域获得订阅价格。

例如

如果我的设备所在的地区是印度,那么我希望订购价格为印度货币

如果我的设备所在的地区是瑞典,那么我希望订购价格为瑞典货币

我该怎么做?

请帮助我。

2 个答案:

答案 0 :(得分:1)

我也遇到过同样的问题,经过一番搜索并得到其他人的帮助,我做到了。

Google为应用内购买提供了按地区划分的价格设置。使用定价模板。只需按照以下步骤使用定价模板设置区域明智的价格即可。

  

如何创建模板:

  1. 打开Goog​​le Play控制台,然后从左侧选择设置。选择定价模板之后。
  2. 点击顶部的新定价模板按钮。
  3. 添加您的名称价格并选择税收第二个选项。
  4. 现在在本地价格选项中,根据您所在地区的不同添加不同的价格。
  5. 点击底部的创建模板按钮。

Example of pricing template

  

如何将此模板与您的订阅SKU ID关联:

  1. 打开您的播放控制台。选择您的应用->商店状态->应用内购买。
  2. 选择已创建的订阅项目或创建新的订阅项目。
  3. 填写所有必需的相关信息。
  4. 现在在价格部分中,您会看到带有下拉箭头的从定价模板导入选项。单击它,您可以看到您的创建模板。选择您的模板,您的价格将自动与您的模板链接。

未选择模板: enter image description here

选择模板后: enter image description here

  1. 完成其他步骤并保存您的订阅项目。

现在,每当用户提出有效订阅价格的请求时,就会按照您已根据您的模板设置的模板显示和使用 区域明智。我希望有人能得到帮助。

按照上述步骤操作后,请遵循以下代码

private int REQ_FOR_QUERY_INVENTORY = 0;
    public static final int REQUEST_FOR_SKU_DETAIL = 1;
    public static final int REQUEST_FOR_CHECK_ACTIVE_SKU = 2;

private void updateSubscriptionPrice() {
        try {
            Log.i(TAG, "request for check Query inventory is active or not");
            REQ_FOR_QUERY_INVENTORY = REQUEST_FOR_SKU_DETAIL;
//            List<String> itemSku = new ArrayList<>();
            List<String> subSku = new ArrayList<>();
            subSku.add("subscription_id");
            subSku.add("subscription_id");
            mHelper.queryInventoryAsync(true, subSku, mQotInventoryListener);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
private IabHelper.QueryInventoryFinishedListener mQotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    @Override
    public void onQueryInventoryFinished(IabResult result, Inventory inv) {
        try {
            Log.d(TAG, "mQotInventoryListener Query inventory finished.");
            handleQueryInventoryFinishResult(result, inv, REQ_FOR_QUERY_INVENTORY);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
private void handleQueryInventoryFinishResult(IabResult result, Inventory inventory, int requestForQueryInventory) {
        try {

            // Have we been disposed of in the meantime? If so, quit.
            if (mHelper == null) return;

            // Is it a failure?
            if (result.isFailure()) {
                Log.e(TAG, "mQotInventoryListener Failed to query inventory: " + result);
//                complain("Error purchasing: " + result);
//                billingCallBackListener.onError();
                return;
            }

            Log.d(TAG, "mQotInventoryListener Query inventory was successful.");

            switch (requestForQueryInventory) {
                case REQUEST_FOR_SKU_DETAIL:
                    try {
                        SkuDetails monthlySKU = inventory.getSkuDetails("subscription_id");
                        if (monthlySKU != null) {
                            String price = monthlySKU.getPrice();
                            Log.e(TAG, "SkuDetails are below......");
                            Log.i(TAG, "monthlySKU.getSku::->" + monthlySKU.getSku());
                            Log.i(TAG, "monthlySKU.getType::->" + monthlySKU.getType());
                            Log.i(TAG, "monthlySKU.getPrice: " + monthlySKU.getPrice());
                            Log.i(TAG, "monthlySKU.getPriceAmountMicros::->" + monthlySKU.getPrice());
//                            Log.i(TAG, "monthlySKU.getPriceCurrencyCode::->"+monthlySKU.get);
                            Log.i(TAG, "monthlySKU.getTitle::->" + monthlySKU.getTitle());
                            Log.i(TAG, "monthlySKU.getDescription::->" + monthlySKU.getDescription());
                            Log.i(TAG, "monthlySKU.getDescription::->" + monthlySKU.getDescription());
//                            String currencyCode = monthlySKU.getPriceCurrencyCode();
                            textview.setText(monthlySKU.getPrice().concat(" ").concat(getResources().getString(R.string.monthly_eur_1)));

                        } else {
                            Log.e(TAG, "monthlySKU details is null");
                        }

                        SkuDetails yearlySKU = inventory.getSkuDetails("subscription_id");
                        if (yearlySKU != null) {
                            String price = yearlySKU.getPrice();
                            Log.e(TAG, "yearly price : " + price);
                            textview.setText(price.concat(" ").concat(getResources().getString(R.string.yearly_eur_10)));
                        } else {
                            Log.e(TAG, "yearlySKU details is null");
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

答案 1 :(得分:0)

在正常的应用内购买流程中,您使用产品的SKU(产品的唯一标识符。您自行设置)查询google play产品。该查询返回完整的产品对象。这些对象包含本地价格。