我在应用内结算示例(Android Studio)中收到错误

问题描述 投票:0回答:1

我想举一个只有订阅者才能看到的活动示例。我想为此使用Google应用内结算库。我试图继续使用Google文档,但是遇到了问题。

'''公共类MainActivity扩展AppCompatActivity实现PurchasesUpdatedListener {

private BillingClient billingClient;
String vipUpgradeOnePrice, vipUpgradeTwoPrice;

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

    billingClient=BillingClient.newBuilder(MainActivity.this).setListener(this).build();
    billingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(BillingResult billingResult) {
            if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK)
                Toast.makeText(MainActivity.this, "WORK", Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(MainActivity.this, "ERROR", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onBillingServiceDisconnected() {
            Toast.makeText(MainActivity.this, "DISCONECTED", Toast.LENGTH_SHORT).show();
        }
    });

    List<String> skuList=new ArrayList<>();
    skuList.add("vip_upgrade_one");
    skuList.add("vip_upgrade_two");

    SkuDetailsParams.Builder params=SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS);
    billingClient.querySkuDetailsAsync(params.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {

                    //Process the Result
                    if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK && skuDetailsList != null){
                        for (SkuDetails skuDetails : skuDetailsList){

                            String sku=skuDetails.getSku();
                            String price=skuDetails.getPrice();

                            if ("jadevip_upgrade_one".equals(sku)){
                                vipUpgradeOnePrice = price;
                            }else if ("jadevip_upgrade_two".equals(sku)){
                                vipUpgradeTwoPrice=price;
                            }

                            BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                                    .setSkuDetails(skuDetails)
                                    .build();
                            int responseCode = billingClient.launchBillingFlow(MainActivity.this,billingFlowParams);
                        }
                    }

                }
            });
}

@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {

    if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK
        && purchases !=null){
        for (Purchase purchase:purchases){
            handlePurchase(purchase);
        }
    }else if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.USER_CANCELED){
        // Handle an error caused by a user cancelling the purchase flow.
    }else {
        // Handle any other error codes.
    }

}

BillingClient client=BillingClient.newBuilder(MainActivity.this).setListener(this).build();
AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = new AcknowledgePurchaseResponseListener() {
    @Override
    public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
        Toast.makeText(MainActivity.this, "Purchase acknowledged", Toast.LENGTH_SHORT).show();
    }
};

void handlePurchase(Purchase purchase) {

    if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
        // Grant entitlement to the user.

        // Acknowledge the purchase if it hasn't already been acknowledged.
        if (!purchase.isAcknowledged()) {
            AcknowledgePurchaseParams acknowledgePurchaseParams =
                    AcknowledgePurchaseParams.newBuilder()
                            .setPurchaseToken(purchase.getPurchaseToken())
                            .build();
            client.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
        }
    }
}

}'''

这是我得到错误的地方。它表示错误描述中存在类型错误,并且responseCode不能为int类型。当我在BillingResult类型中编写reponseCod时没有出现任何错误,但这一次它不起作用。

int responseCode = billingClient.launchBillingFlow(MainActivity.this,billingFlowParams);

如果有人知道如何解决该错误,我将非常感谢。

最后,由于我的目标是准备一个只有订阅者才能看到的Activity,我是否需要将这些代码写入按钮的setOnClickListener方法中以切换到Activity?还是只写一部分就够了?

android android-studio android-activity in-app-billing android-inapp-purchase
1个回答
0
投票

[billingClient.launchBillingFlow()返回BillingResult

BillingResult responseCode = billingClient.launchBillingFlow(MainActivity.this,billingFlowParams);

这里的API参考:https://developer.android.com/reference/com/android/billingclient/api/BillingClient

© www.soinside.com 2019 - 2024. All rights reserved.