应用内结算,在文本上显示本地化价格

时间:2019-04-17 20:08:58

标签: java android

在我的Android应用中,我想在按钮上显示应用内购买的本地化价格。 我尝试按照指南设置应用内结算(https://medium.com/@patpatchpatrick/adding-the-google-play-billing-library-to-your-application-fbeb9ec03151)来设置结算本身,并且看来可以在测试帐户中使用。
尽管现在不赞成使用.setSku和.setType,并且现在要使用.setSkuDetails,但是从文档上看,它是很棒的,因为有很多选择。
但是我似乎无法访问SkuDetails类。

几周以来,我一直在尝试实施应用内结算,并查看了各种文章和指南,但似乎找不到我的解决方法。我觉得我已经尝试了一切,不知道下一步该怎么做。

packages: {
  app: {
    main: 'main.js',
    defaultExtension: 'js',
  },
  rxjs: {
    defaultExtension: 'js'
  }
}

好吧,我很想获得SkuDetails的访问权限,所以我可以使用它的getPrice()方法来显示我的应用内价格。
现在,我不能使用getPrice()。

1 个答案:

答案 0 :(得分:0)

进行活动以实现侦听器,然后您将可以更轻松地访问所有内容。

我重新格式化了您的代码以实现您的所有侦听器,它可能会有一些小错误,但是希望您能理解。

请注意,我还实现了View.OnClickListener,这使代码更加清晰,但是您需要在模块级别为要传递给构建器的skuDetails分配一个变量,而我没有这样做。如果您有任何问题,请告诉我。

public class InAppBilling extends AppCompatActivity implements
        PurchasesUpdatedListener, SkuDetailsResponseListener,
        BillingClientStateListener, View.OnClickListener
{

    private static final String TAG = "InAppBilling";

    //In APP Produkter
    static final String ITEM_SKU_ADREMOVAL = "remove_ads_salary1";

    private Button            mButton;
    private Button            back_Button;
    private String            mAdRemovalPrice;
    private SharedPreferences mSharedPreferences;

    private BillingClient mBillingClient;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inappbilling);

        mBillingClient = BillingClient.newBuilder(this).setListener(this).build();
        mBillingClient.startConnection(this);

        findViewById(R.id.buy_button).setOnClickListener(this);
        findViewById(R.id.back_button).setOnClickListener(this);
    }

    @Override
    public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases)
    {

    }

    @Override
    public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList)
    {
        if (responseCode == BillingClient.BillingResponse.OK && skuDetailsList != null)
        {
            for (SkuDetails skuDetails : skuDetailsList)
            {
                String sku   = skuDetails.getSku();
                String price = skuDetails.getPrice();

                if (ITEM_SKU_ADREMOVAL.equals(sku))
                {
                    mAdRemovalPrice = price;
                }
            }
        }
    }

    @Override
    public void onClick(View view)
    {
        if (view.getId() == R.id.back_button)
        {
            super.onBackPressed();
        }
        else if (view.getId() == R.id.buy_button)
        {
            BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                    .setSkuDetails(skuDetails)
                    .build();

            int responseCode = mBillingClient.launchBillingFlow(this, flowParams);
        }
    }

    @Override
    public void onBillingSetupFinished(int responseCode)
    {
        if (responseCode == BillingClient.BillingResponse.OK)
        {
            List skuList = new ArrayList<>();
            skuList.add(ITEM_SKU_ADREMOVAL);
            SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
            params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
            mBillingClient.querySkuDetailsAsync(params.build(), this);
        }
    }

    @Override
    public void onBillingServiceDisconnected()
    {
        // IMPLEMENT RETRY POLICY - TRY TO RESTART ON NEXT REQUEST BY CALLING startConnection()
    }
}