Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package official.alfian.useless;
- import com.android.billingclient.api.BillingClient;
- import com.android.billingclient.api.BillingClientStateListener;
- import com.android.billingclient.api.BillingFlowParams;
- import com.android.billingclient.api.ConsumeResponseListener;
- import com.android.billingclient.api.Purchase;
- import com.android.billingclient.api.PurchasesUpdatedListener;
- import com.android.billingclient.api.SkuDetails;
- import com.android.billingclient.api.SkuDetailsParams;
- import com.android.billingclient.api.SkuDetailsResponseListener;
- import android.app.Activity;
- import android.support.annotation.Nullable;
- import android.util.Log;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * Created by paypro on 2/5/18.
- */
- public class BillingManager implements PurchasesUpdatedListener {
- private static final String TAG = "BillingManager";
- Activity activity;
- BillingClient billingClient;
- boolean isServiceConnected = false;
- int billingClientResponseCode;
- BillingUpdatesListener billingUpdatesListener;
- public BillingManager(Activity activity, final BillingUpdatesListener billingUpdatesListener) {
- this.activity = activity;
- this.billingUpdatesListener = billingUpdatesListener;
- billingClient = BillingClient.newBuilder(activity).setListener(this).build();
- startServiceConnection(new Runnable() {
- @Override
- public void run() {
- billingUpdatesListener.onBillingClientSetupFinished();
- }
- });
- }
- @Override
- public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
- if (responseCode == BillingClient.BillingResponse.OK) {
- billingUpdatesListener.onPurchasesUpdated(purchases);
- } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
- Log.i(TAG, "onPurchasesUpdated() – user cancelled the purchase flow – skipping");
- } else {
- Log.w(TAG, "onPurchasesUpdated() got unknown resultCode: " + responseCode);
- }
- }
- public void startServiceConnection(final Runnable runnable) {
- billingClient.startConnection(new BillingClientStateListener() {
- @Override
- public void onBillingSetupFinished(int responseCode) {
- if (responseCode == BillingClient.BillingResponse.OK) {
- isServiceConnected = true;
- if (runnable != null) {
- runnable.run();
- }
- }
- billingClientResponseCode = responseCode;
- }
- @Override
- public void onBillingServiceDisconnected() {
- isServiceConnected = false;
- }
- });
- }
- private void executeServiceRequest(Runnable runnable) {
- if (isServiceConnected) {
- runnable.run();
- } else {
- startServiceConnection(runnable);
- }
- }
- public void queryPurchases() {
- Runnable queryToExecute = new Runnable() {
- @Override
- public void run() {
- Purchase.PurchasesResult purchasesResult = billingClient
- .queryPurchases(BillingClient.SkuType.INAPP);
- if (areSubscriptionsSupported()) {
- Purchase.PurchasesResult subscriptionResult = billingClient
- .queryPurchases(BillingClient.SkuType.SUBS);
- if (subscriptionResult.getResponseCode() == BillingClient.BillingResponse.OK) {
- purchasesResult.getPurchasesList()
- .addAll(subscriptionResult.getPurchasesList());
- } else {
- Log.w(TAG, "Failed");
- }
- } else if (purchasesResult.getResponseCode() == BillingClient.BillingResponse.OK) {
- Log.w(TAG, "Permission denied");
- } else {
- Log.w(TAG, "Failed");
- }
- onQueryPurchasesFinished(purchasesResult);
- }
- };
- executeServiceRequest(queryToExecute);
- }
- private void onQueryPurchasesFinished(Purchase.PurchasesResult result) {
- if (billingClient == null || result
- .getResponseCode() != BillingClient.BillingResponse.OK) {
- Log.w(TAG, "Billing client was null or result code (" + result.getResponseCode()
- + ") was bad – quitting");
- return;
- }
- Log.d(TAG, "Query inventory was successful.");
- onPurchasesUpdated(BillingClient.BillingResponse.OK, result.getPurchasesList());
- }
- public boolean areSubscriptionsSupported() {
- int responseCode = billingClient
- .isFeatureSupported(BillingClient.FeatureType.SUBSCRIPTIONS);
- if (responseCode != BillingClient.BillingResponse.OK) {
- Log.w(TAG, "areSubscriptionsSupported() got an error response: " + responseCode);
- }
- return responseCode == BillingClient.BillingResponse.OK;
- }
- public void initiatePurchaseFlow(final String skuId, final ArrayList<String> oldSkus,
- final @BillingClient.SkuType String billingType) {
- Runnable purchaseFlowRequest = new Runnable() {
- @Override
- public void run() {
- BillingFlowParams mParams = BillingFlowParams.newBuilder().setSku(skuId)
- .setType(billingType).setOldSkus(oldSkus).build();
- billingClient.launchBillingFlow(activity, mParams);
- }
- };
- executeServiceRequest(purchaseFlowRequest);
- }
- public void consumeAsync(final String purchaseToken) {
- final ConsumeResponseListener onConsumeListener = new ConsumeResponseListener() {
- @Override
- public void onConsumeResponse(int responseCode, String purchaseToken) {
- billingUpdatesListener.onConsumeFinished(purchaseToken, responseCode);
- }
- };
- Runnable consumeRequest = new Runnable() {
- @Override
- public void run() {
- billingClient.consumeAsync(purchaseToken, onConsumeListener);
- }
- };
- executeServiceRequest(consumeRequest);
- }
- public void querySkuDetailsAsync(final List<String> skuList,
- final SkuDetailsResponseListener skuListener) {
- Runnable queryRequest = new Runnable() {
- @Override
- public void run() {
- SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
- params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
- billingClient.querySkuDetailsAsync(params.build(),
- new SkuDetailsResponseListener() {
- @Override
- public void onSkuDetailsResponse(int responseCode,
- List<SkuDetails> skuDetailsList) {
- skuListener.onSkuDetailsResponse(responseCode, skuDetailsList);
- }
- });
- }
- };
- executeServiceRequest(queryRequest);
- }
- public interface BillingUpdatesListener {
- void onBillingClientSetupFinished();
- void onConsumeFinished(String token, @BillingClient.BillingResponse int result);
- void onPurchasesUpdated(List<Purchase> purchases);
- }
- }
Add Comment
Please, Sign In to add comment