Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface QuerySkuDetailsListener {
- void onSuccess(List<SkuDetails> skuDetailsList);
- void onErrorProductsHaveDifferentTypes();
- void onBillingClientError(int error_code);
- }
- public void querySkuDetails(final QuerySkuDetailsListener querySkuDetailsListener, final Product... products) {
- if (products.length < 1) {
- //ERROR_NO_PRODUCTS_TO_QUERY
- throw new NullPointerException();
- }
- String querySkuType = products[0].getSkuType();
- SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
- List<String> skuList = new ArrayList<>();
- for (Product product : products) {
- skuList.add(product.getSku());
- if (!product.getSkuType().equals(querySkuType)) {
- //ERROR_SKU_TYPE_CANT_BE_DIFFERENT
- querySkuDetailsListener.onErrorProductsHaveDifferentTypes();
- return;
- }
- }
- params.setSkusList(skuList).setType(querySkuType);
- billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
- @Override
- public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
- if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
- querySkuDetailsListener.onSuccess(skuDetailsList);
- }
- else {
- //ERROR QUERYING SKU DETAILS
- querySkuDetailsListener.onBillingClientError(billingResult.getResponseCode());
- }
- }
- });
- }
- private void initiatePurchaseFlow(final Activity activity, @Nullable final Product oldProduct, final Product product, final JsonObject metadata, final InitiatePurchaseListener initiatePurchaseListener) {
- //Check if billingClient is ready
- if (billingClient.isReady()) {
- querySkuDetails(new QuerySkuDetailsListener() {
- @Override
- public void onSuccess(List<SkuDetails> skuDetailsList) {
- // Process the result.
- BillingFlowParams.Builder flowParamsBuilder = BillingFlowParams.newBuilder();
- flowParamsBuilder.setSkuDetails(skuDetailsList.get(0));
- if (null != oldProduct) {
- flowParamsBuilder.setOldSku(oldProduct.getSku());
- flowParamsBuilder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_WITH_TIME_PRORATION);
- }
- BillingFlowParams flowParams = flowParamsBuilder.build();
- int responseCode = billingClient.launchBillingFlow(activity, flowParams).getResponseCode();
- if (responseCode == BillingClient.BillingResponseCode.OK) {
- //SUCCESS, OK
- ...Rest of the irrelevant code...
- }
- else {
- //ERROR_IN_LAUNCHING_BILLING_FLOW
- dispenseInitiatePurchaseFlowError(activity, initiatePurchaseListener, InitiatePurchaseErrorCodes.ERROR_IN_LAUNCHING_BILLING_FLOW, getBillingClientErrorDescription(responseCode));
- }
- }
- @Override
- public void onErrorProductsHaveDifferentTypes() {
- //ERROR_IN_QUERYING_SKU_DETAILS_PRODUCTS_HAVE_DIFFERENT_TYPES
- dispenseInitiatePurchaseFlowError(activity, initiatePurchaseListener, InitiatePurchaseErrorCodes.ERROR_IN_QUERYING_SKU_DETAILS_PRODUCTS_HAVE_DIFFERENT_TYPES, getBillingClientErrorDescription(0));
- }
- @Override
- public void onBillingClientError(int error_code) {
- //ERROR_IN_QUERYING_SKU_DETAILS
- dispenseInitiatePurchaseFlowError(activity, initiatePurchaseListener, InitiatePurchaseErrorCodes.ERROR_IN_QUERYING_SKU_DETAILS, getBillingClientErrorDescription(error_code));
- }
- }, product);
- }
- else {
- //ERROR_BILLING_CLIENT_IS_NOT_READY
- //Trying to reconnect once
- billingClient.startConnection(new BillingClientStateListener() {
- @Override
- public void onBillingSetupFinished(BillingResult billingResult) {
- if (billingResult.getResponseCode() == BillingResponse.OK) {
- //launching again
- initiatePurchaseFlow(activity, oldProduct, product, metadata, initiatePurchaseListener);
- }
- }
- @Override
- public void onBillingServiceDisconnected() {
- // showing an error dialog
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement