биллинг в приложении onPurchaseUpdated не вызывается - PullRequest
0 голосов
/ 27 декабря 2018

Я тестирую приложение для биллинга в приложении. Я установил свой аккаунт в консоли Google Play, и все работает правильно и покупка прошла успешно, но последний метод onPurchasesUpdated Я не знаю, звонит он или нет, но я неЯ не могу получить тост, так что, возможно, он не звонит. Есть ли проблема с моим кодом?Приложение сообщает мне об успешной покупке, как я могу что-то кодировать при успешной покупке?

public class MainActivity extends AppCompatActivity implements PurchasesUpdatedListener {

BillingClient mBillingClient;

private Button mBtnBuy;

private String product = "product_test_4";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mBtnBuy = findViewById(R.id.mBtn_buy);

    mBtnBuy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener(new PurchasesUpdatedListener() {
                @Override
                public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {



                }


            }).build();

            mBillingClient.startConnection(new BillingClientStateListener() {
                @Override
                public void onBillingSetupFinished(int responseCode) {
                    startPurchase();
                }

                @Override
                public void onBillingServiceDisconnected() {

                }
            });
        }
    });


}

public void startPurchase() {

    List<String> skuList = new ArrayList<>();
    skuList.add(product);
    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
    mBillingClient.querySkuDetailsAsync(params.build(),
            new SkuDetailsResponseListener() {
                @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 (product.equals(sku)) {

                            }
                        }
                    }
                }
                // Process the result.
            });

    BillingFlowParams flowParams = BillingFlowParams.newBuilder()
            .setSku(product)
            .setType(BillingClient.SkuType.INAPP) // SkuType.SUB for subscription
            .build();
    int responseCode = mBillingClient.launchBillingFlow(MainActivity.this, flowParams);
}


@Override
public void onPurchasesUpdated(@BillingClient.BillingResponse int responseCode, List<Purchase> purchases) {
    if (responseCode == BillingClient.BillingResponse.OK
            && purchases != null) {
        Toast.makeText(this, "purchase success", Toast.LENGTH_SHORT).show();
        Log.d("tag","purchase success");
    } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
        // Handle an error caused by a user cancelling the purchase flow.
        Toast.makeText(this, "purchase cancelled", Toast.LENGTH_SHORT).show();
        Log.d("tag","purchase cancelled");
    } else {
        // Handle any other error codes.
        Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
        Log.d("tag","purchase error");
    }
}

}

1 Ответ

0 голосов
/ 27 декабря 2018

Вы устанавливаете свой переменный покупок в обновлении в mBtnBuy onClick

mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener(new PurchasesUpdatedListener() {
            @Override
            public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {



            }


        }).build();

, так что метод будет вызываться при покупке вместо последнего onPurchasesUpdated

Вы можете сделать mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener().build(); следующим образом, а затемпоследний onPurchasesUpdated будет называться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...