Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.92 KB | None | 0 0
  1. public interface QuerySkuDetailsListener {
  2. void onSuccess(List<SkuDetails> skuDetailsList);
  3.  
  4. void onErrorProductsHaveDifferentTypes();
  5.  
  6. void onBillingClientError(int error_code);
  7. }
  8.  
  9. public void querySkuDetails(final QuerySkuDetailsListener querySkuDetailsListener, final Product... products) {
  10. if (products.length < 1) {
  11. //ERROR_NO_PRODUCTS_TO_QUERY
  12. throw new NullPointerException();
  13. }
  14.  
  15. String querySkuType = products[0].getSkuType();
  16.  
  17. SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
  18. List<String> skuList = new ArrayList<>();
  19. for (Product product : products) {
  20. skuList.add(product.getSku());
  21. if (!product.getSkuType().equals(querySkuType)) {
  22. //ERROR_SKU_TYPE_CANT_BE_DIFFERENT
  23. querySkuDetailsListener.onErrorProductsHaveDifferentTypes();
  24. return;
  25. }
  26. }
  27. params.setSkusList(skuList).setType(querySkuType);
  28.  
  29. billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
  30. @Override
  31. public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
  32. if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
  33. querySkuDetailsListener.onSuccess(skuDetailsList);
  34. }
  35. else {
  36. //ERROR QUERYING SKU DETAILS
  37. querySkuDetailsListener.onBillingClientError(billingResult.getResponseCode());
  38. }
  39. }
  40. });
  41. }
  42.  
  43. private void initiatePurchaseFlow(final Activity activity, @Nullable final Product oldProduct, final Product product, final JsonObject metadata, final InitiatePurchaseListener initiatePurchaseListener) {
  44.  
  45. //Check if billingClient is ready
  46. if (billingClient.isReady()) {
  47. querySkuDetails(new QuerySkuDetailsListener() {
  48. @Override
  49. public void onSuccess(List<SkuDetails> skuDetailsList) {
  50. // Process the result.
  51. BillingFlowParams.Builder flowParamsBuilder = BillingFlowParams.newBuilder();
  52. flowParamsBuilder.setSkuDetails(skuDetailsList.get(0));
  53. if (null != oldProduct) {
  54. flowParamsBuilder.setOldSku(oldProduct.getSku());
  55. flowParamsBuilder.setReplaceSkusProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_WITH_TIME_PRORATION);
  56. }
  57. BillingFlowParams flowParams = flowParamsBuilder.build();
  58. int responseCode = billingClient.launchBillingFlow(activity, flowParams).getResponseCode();
  59. if (responseCode == BillingClient.BillingResponseCode.OK) {
  60. //SUCCESS, OK
  61. ...Rest of the irrelevant code...
  62. }
  63. else {
  64. //ERROR_IN_LAUNCHING_BILLING_FLOW
  65. dispenseInitiatePurchaseFlowError(activity, initiatePurchaseListener, InitiatePurchaseErrorCodes.ERROR_IN_LAUNCHING_BILLING_FLOW, getBillingClientErrorDescription(responseCode));
  66. }
  67. }
  68.  
  69. @Override
  70. public void onErrorProductsHaveDifferentTypes() {
  71. //ERROR_IN_QUERYING_SKU_DETAILS_PRODUCTS_HAVE_DIFFERENT_TYPES
  72. dispenseInitiatePurchaseFlowError(activity, initiatePurchaseListener, InitiatePurchaseErrorCodes.ERROR_IN_QUERYING_SKU_DETAILS_PRODUCTS_HAVE_DIFFERENT_TYPES, getBillingClientErrorDescription(0));
  73. }
  74.  
  75. @Override
  76. public void onBillingClientError(int error_code) {
  77. //ERROR_IN_QUERYING_SKU_DETAILS
  78. dispenseInitiatePurchaseFlowError(activity, initiatePurchaseListener, InitiatePurchaseErrorCodes.ERROR_IN_QUERYING_SKU_DETAILS, getBillingClientErrorDescription(error_code));
  79. }
  80. }, product);
  81. }
  82. else {
  83. //ERROR_BILLING_CLIENT_IS_NOT_READY
  84. //Trying to reconnect once
  85. billingClient.startConnection(new BillingClientStateListener() {
  86. @Override
  87. public void onBillingSetupFinished(BillingResult billingResult) {
  88. if (billingResult.getResponseCode() == BillingResponse.OK) {
  89. //launching again
  90. initiatePurchaseFlow(activity, oldProduct, product, metadata, initiatePurchaseListener);
  91. }
  92. }
  93. @Override
  94. public void onBillingServiceDisconnected() {
  95. // showing an error dialog
  96. }
  97. });
  98. }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement