From 3c189f07355324dbbca6d73f4dc42833fbd6eff4 Mon Sep 17 00:00:00 2001
From: 18142669586 <1669783059@qq.com>
Date: Wed, 20 Jul 2022 14:22:54 +0800
Subject: [PATCH] 1
---
billing/build.gradle | 76 --
billing/proguard-rules.pro | 21 -
.../billing/ExampleInstrumentedTest.java | 26 -
billing/src/main/AndroidManifest.xml | 2 -
.../gitee/billing/GoogleBillingUtil.java | 907 ------------------
.../billing/OnGoogleBillingListener.java | 105 --
.../com/tjbaobao/gitee/billing/PackInfo.java | 10 -
billing/src/main/res/values/strings.xml | 3 -
.../gitee/billing/ExampleUnitTest.java | 17 -
9 files changed, 1167 deletions(-)
delete mode 100644 billing/build.gradle
delete mode 100644 billing/proguard-rules.pro
delete mode 100644 billing/src/androidTest/java/com/tjbaobao/gitee/billing/ExampleInstrumentedTest.java
delete mode 100644 billing/src/main/AndroidManifest.xml
delete mode 100644 billing/src/main/java/com/tjbaobao/gitee/billing/GoogleBillingUtil.java
delete mode 100644 billing/src/main/java/com/tjbaobao/gitee/billing/OnGoogleBillingListener.java
delete mode 100644 billing/src/main/java/com/tjbaobao/gitee/billing/PackInfo.java
delete mode 100644 billing/src/main/res/values/strings.xml
delete mode 100644 billing/src/test/java/com/tjbaobao/gitee/billing/ExampleUnitTest.java
diff --git a/billing/build.gradle b/billing/build.gradle
deleted file mode 100644
index 07a5ce22d..000000000
--- a/billing/build.gradle
+++ /dev/null
@@ -1,76 +0,0 @@
-apply plugin: 'com.android.library'
-//apply plugin: 'com.github.dcendents.android-maven'
-group='com.gitee.tjbaobao'
-
-android {
- compileSdkVersion rootProject.ext.android.compileSdkVersion
- buildToolsVersion rootProject.ext.android.buildToolsVersion
- packagingOptions {
- pickFirst "lib/armeabi/libyuvutils.so"
- pickFirst "lib/arm64-v8a/libyuvutils.so"
- pickFirst "lib/armeabi-v7a/libyuvutils.so"
- pickFirst "lib/armeabi/libyuvtools.so"
- pickFirst "lib/arm64-v8a/libyuvtools.so"
- pickFirst "lib/armeabi-v7a/libyuvtools.so"
- exclude "lib/arm64-v8a/libmmcv_api_handgesture.so"
- exclude "lib/arm64-v8a/libmmcv_api_express.so"
- exclude "lib/arm64-v8a/libMediaEncoder.so"
- exclude "lib/arm64-v8a/libarcore_sdk_c.so"
- exclude "lib/arm64-v8a/libmediadecoder.so"
- exclude "lib/arm64-v8a/libMediaMuxer.so"
- exclude "lib/arm64-v8a/libarcore_sdk_jni.so"
- exclude "lib/arm64-v8a/libMediaUtils.so"
- exclude "lib/arm64-v8a/libcosmosffmpeg.so"
-
- }
-
- defaultConfig {
- minSdkVersion rootProject.ext.android.minSdkVersion
- targetSdkVersion rootProject.ext.android.targetSdkVersion
- versionCode rootProject.ext.android.versionCode
- versionName rootProject.ext.android.versionName
- manifestPlaceholders = rootProject.ext.manifestPlaceholders
-
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-}
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'androidx.appcompat:appcompat:1.0.0'
-
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'androidx.test.ext:junit:1.1.1'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
-
- //谷歌内购
- api 'com.android.billingclient:billing:3.0.0'
-}
-
-task sourcesJar(type: Jar) {
- classifier = 'sources'
- from android.sourceSets.main.java.sourceFiles
-}
-
-artifacts {
- archives sourcesJar
-}
-
-tasks.withType(Javadoc) {
- options.addStringOption('Xdoclint:none', '-quiet')
- options.addStringOption('encoding', 'UTF-8')
- options.addStringOption('charSet', 'UTF-8')
-}
diff --git a/billing/proguard-rules.pro b/billing/proguard-rules.pro
deleted file mode 100644
index f1b424510..000000000
--- a/billing/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
diff --git a/billing/src/androidTest/java/com/tjbaobao/gitee/billing/ExampleInstrumentedTest.java b/billing/src/androidTest/java/com/tjbaobao/gitee/billing/ExampleInstrumentedTest.java
deleted file mode 100644
index e3dfe22ee..000000000
--- a/billing/src/androidTest/java/com/tjbaobao/gitee/billing/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.tjbaobao.gitee.billing;
-
-import android.content.Context;
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
- @Test
- public void useAppContext() {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
-
- assertEquals("com.tjbaobao.gitee.billing.test", appContext.getPackageName());
- }
-}
diff --git a/billing/src/main/AndroidManifest.xml b/billing/src/main/AndroidManifest.xml
deleted file mode 100644
index d5729cf11..000000000
--- a/billing/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
diff --git a/billing/src/main/java/com/tjbaobao/gitee/billing/GoogleBillingUtil.java b/billing/src/main/java/com/tjbaobao/gitee/billing/GoogleBillingUtil.java
deleted file mode 100644
index e719e1f38..000000000
--- a/billing/src/main/java/com/tjbaobao/gitee/billing/GoogleBillingUtil.java
+++ /dev/null
@@ -1,907 +0,0 @@
-package com.tjbaobao.gitee.billing;
-
-import android.app.Activity;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import android.util.Log;
-import com.android.billingclient.api.*;
-
-import java.util.*;
-
-/**
- * 作者:天镜baobao
- * 时间:2019/1/5 15:16
- * 说明:允许使用,但请遵循Apache License 2.0
- * 使用:
- * Copyright 2019 天镜baobao
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@SuppressWarnings({"WeakerAccess", "unused", "UnusedReturnValue"})
-public class GoogleBillingUtil {
-
- private static final String TAG = "GoogleBillingUtil";
- private static boolean IS_DEBUG = false;
- private static String[] inAppSKUS = new String[]{};//内购ID,必填,注意!如果用不着的请去掉多余的""
- private static String[] subsSKUS = new String[]{};//订阅ID,必填,注意!如果用不着的请去掉多余的""
-
- public static final String BILLING_TYPE_INAPP = BillingClient.SkuType.INAPP;//内购
- public static final String BILLING_TYPE_SUBS = BillingClient.SkuType.SUBS;//订阅
-
- private static BillingClient mBillingClient;
- private static BillingClient.Builder builder ;
- private static List onGoogleBillingListenerList = new ArrayList<>();
- private static Map onGoogleBillingListenerMap = new HashMap<>();
- private MyPurchasesUpdatedListener purchasesUpdatedListener = new MyPurchasesUpdatedListener();
-
- private static boolean isAutoAcknowledgePurchase = true;
-
- private static final GoogleBillingUtil mGoogleBillingUtil = new GoogleBillingUtil() ;
-
- private GoogleBillingUtil()
- {
-
- }
-
- //region===================================初始化google应用内购买服务=================================
-
- /**
- * 设置skus
- * @param inAppSKUS 内购id
- * @param subsSKUS 订阅id
- */
- public static void setSkus(@Nullable String[] inAppSKUS,@Nullable String[] subsSKUS){
- if(inAppSKUS!=null){
- GoogleBillingUtil.inAppSKUS = Arrays.copyOf(inAppSKUS,inAppSKUS.length);
- }
- if(subsSKUS!=null){
- GoogleBillingUtil.subsSKUS = Arrays.copyOf(subsSKUS,subsSKUS.length);
- }
- }
-
- private static void copyToArray(T[] base,T[] target){
- System.arraycopy(base, 0, target, 0, base.length);
- }
-
- public static GoogleBillingUtil getInstance()
- {
- return mGoogleBillingUtil;
- }
-
- /**
- * 开始建立内购连接
- * @param activity activity
- */
- public GoogleBillingUtil build(Activity activity)
- {
- purchasesUpdatedListener.tag = getTag(activity);
- if(mBillingClient==null)
- {
- synchronized (mGoogleBillingUtil)
- {
- if(mBillingClient==null)
- {
- builder = BillingClient.newBuilder(activity);
- mBillingClient = builder.setListener(purchasesUpdatedListener)
- .enablePendingPurchases()
- .build();
- }
- else
- {
- builder.setListener(purchasesUpdatedListener);
- }
- }
- }
- else
- {
- builder.setListener(purchasesUpdatedListener);
- }
- synchronized (mGoogleBillingUtil)
- {
- if(mGoogleBillingUtil.startConnection(activity))
- {
- mGoogleBillingUtil.queryInventoryInApp(getTag(activity));
- mGoogleBillingUtil.queryInventorySubs(getTag(activity));
- mGoogleBillingUtil.queryPurchasesInApp(getTag(activity));
- }
- }
- return mGoogleBillingUtil;
- }
-
- public boolean startConnection(Activity activity){
- return startConnection(getTag(activity));
- }
-
- private boolean startConnection(String tag)
- {
- if(mBillingClient==null)
- {
- log("初始化失败:mBillingClient==null");
- return false;
- }
- if(!mBillingClient.isReady())
- {
- mBillingClient.startConnection(new BillingClientStateListener() {
- @Override
- public void onBillingSetupFinished(BillingResult billingResult) {
- if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onSetupSuccess(listener.tag.equals(tag));
- }
- queryInventoryInApp(tag);
- queryInventorySubs(tag);
- queryPurchasesInApp(tag);
- }
- else
- {
- log("初始化失败:onSetupFail:code="+billingResult.getResponseCode());
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onFail(GoogleBillingListenerTag.SETUP,billingResult.getResponseCode(), listener.tag.equals(tag));
- }
- }
- }
-
- @Override
- public void onBillingServiceDisconnected() {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onBillingServiceDisconnected();
- }
- log("初始化失败:onBillingServiceDisconnected");
- }
- });
- return false;
- }
- else
- {
- return true;
- }
- }
-
- //endregion
-
- //region===================================查询商品=================================
-
- /**
- * 查询内购商品信息
- */
- public void queryInventoryInApp(Activity activity)
- {
- queryInventoryInApp(getTag(activity));
- }
-
- private void queryInventoryInApp(String tag)
- {
- queryInventory(tag,BillingClient.SkuType.INAPP);
- }
-
- /**
- * 查询订阅商品信息
- */
- public void queryInventorySubs(Activity activity)
- {
- queryInventory(getTag(activity),BillingClient.SkuType.SUBS);
- }
-
- public void queryInventorySubs(String tag)
- {
- queryInventory(tag,BillingClient.SkuType.SUBS);
- }
-
- private void queryInventory(String tag,final String skuType) {
- Runnable runnable=new Runnable() {
- @Override
- public void run() {
-
- if (mBillingClient == null)
- {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onError(GoogleBillingListenerTag.QUERY, listener.tag.equals(tag));
- }
- return ;
- }
- ArrayList skuList = new ArrayList<>();
- if(skuType.equals(BillingClient.SkuType.INAPP))
- {
- Collections.addAll(skuList, inAppSKUS);
- }
- else if(skuType.equals(BillingClient.SkuType.SUBS))
- {
- Collections.addAll(skuList, subsSKUS);
- }
- if(!skuList.isEmpty()){
- SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
- params.setSkusList(skuList).setType(skuType);
- mBillingClient.querySkuDetailsAsync(params.build(),new MySkuDetailsResponseListener(skuType,tag));
- }
- }
- };
-
- executeServiceRequest(tag,runnable);
- }
-
- //endregion
-
- //region===================================购买商品=================================
- /**
- * 发起内购
- * @param skuId 内购商品id
- */
- public void purchaseInApp(Activity activity, String skuId)
- {
- purchase(activity,skuId, BillingClient.SkuType.INAPP);
- }
-
- /**
- * 发起订阅
- * @param skuId 订阅商品id
- */
- public void purchaseSubs(Activity activity,String skuId)
- {
- purchase(activity,skuId, BillingClient.SkuType.SUBS);
- }
-
- private void purchase(Activity activity,final String skuId,final String skuType)
- {
- String tag = getTag(activity);
- if(mBillingClient==null)
- {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onError(GoogleBillingListenerTag.PURCHASE, listener.tag.equals(tag));
- }
- return ;
- }
- if(startConnection(tag))
- {
- purchasesUpdatedListener.tag = tag;
- builder.setListener(purchasesUpdatedListener);
- List skuList = new ArrayList<>();
- skuList.add(skuId);
- SkuDetailsParams skuDetailsParams = SkuDetailsParams.newBuilder()
- .setSkusList(skuList)
- .setType(skuType)
- .build();
- mBillingClient.querySkuDetailsAsync(skuDetailsParams, new SkuDetailsResponseListener() {
- @Override
- public void onSkuDetailsResponse(BillingResult billingResult, List skuDetailsList) {
-
- }
- });
-
- mBillingClient.querySkuDetailsAsync(skuDetailsParams, new SkuDetailsResponseListener() {
- @Override
- public void onSkuDetailsResponse(BillingResult billingResult, List skuDetailsList) {
- if(skuDetailsList!=null&&!skuDetailsList.isEmpty()){
- BillingFlowParams flowParams = BillingFlowParams.newBuilder()
- .setSkuDetails(skuDetailsList.get(0))
- .build();
- mBillingClient.launchBillingFlow(activity,flowParams);
- }
- }
- });
-
- }
- else
- {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onError(GoogleBillingListenerTag.PURCHASE,listener.tag.equals(tag));
- }
- }
- }
-
-
- //endregion
-
- //region===================================消耗商品=================================
-
- /**
- * 消耗商品
- * @param purchaseToken {@link Purchase#getPurchaseToken()}
- */
- public void consumeAsync(Activity activity,String purchaseToken)
- {
- consumeAsync(getTag(activity),purchaseToken,null);
- }
-
-
- public void consumeAsync(Activity activity,String purchaseToken,@Nullable String developerPayload)
- {
- consumeAsync(getTag(activity),purchaseToken,developerPayload);
- }
-
- /**
- * 消耗商品
- * @param purchaseToken {@link Purchase#getPurchaseToken()}
- */
- private void consumeAsync(String tag,String purchaseToken){
- consumeAsync(tag,purchaseToken,null);
- }
-
-
- private void consumeAsync(String tag,String purchaseToken,@Nullable String developerPayload)
- {
- if(mBillingClient==null)
- {
- return ;
- }
- ConsumeParams consumeParams = ConsumeParams.newBuilder()
- .setPurchaseToken(purchaseToken)
- .build();
- mBillingClient.consumeAsync(consumeParams,new MyConsumeResponseListener(tag));
- }
-
- /**
- * 消耗内购商品-通过sku数组
- * @param sku sku
- */
- public void consumeAsyncInApp(Activity activity,@NonNull String... sku)
- {
- if(mBillingClient==null) {
- return ;
- }
- List skuList = Arrays.asList(sku);
- consumeAsyncInApp(activity,skuList,null);
- }
-
- /**
- * 消耗内购商品-通过sku数组
- * @param skuList sku数组
- */
- public void consumeAsyncInApp(Activity activity,@NonNull List skuList,@Nullable List developerPayloadList)
- {
- if(mBillingClient==null) {
- return ;
- }
- List purchaseList = queryPurchasesInApp(activity);
- if(purchaseList!=null){
- for(Purchase purchase : purchaseList){
- int index = skuList.indexOf(purchase.getSku());
- if(index!=-1){
- if(developerPayloadList!=null&&index queryPurchasesInApp(Activity activity)
- {
- return queryPurchases(getTag(activity),BillingClient.SkuType.INAPP);
- }
-
- private List queryPurchasesInApp(String tag)
- {
- return queryPurchases(tag,BillingClient.SkuType.INAPP);
- }
-
- /**
- * 获取已经订阅的商品
- * @return 商品列表
- */
- public List queryPurchasesSubs(Activity activity)
- {
- return queryPurchases(getTag(activity),BillingClient.SkuType.SUBS);
- }
-
- private List queryPurchases(String tag,String skuType)
- {
- if(mBillingClient==null)
- {
- return null;
- }
- if(!mBillingClient.isReady())
- {
- startConnection(tag);
- }
- else
- {
- Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(skuType);
- if(purchasesResult!=null)
- {
- if(purchasesResult.getResponseCode()== BillingClient.BillingResponseCode.OK)
- {
- List purchaseList = purchasesResult.getPurchasesList();
- if(purchaseList!=null&&!purchaseList.isEmpty())
- {
- for(Purchase purchase:purchaseList)
- {
- for(OnGoogleBillingListener listener : onGoogleBillingListenerList) {
- boolean isSelf = listener.tag.equals(tag);//是否是当前页面
- boolean isSuccess = listener.onRecheck(skuType, purchase, isSelf);//是否消耗或者确认
- if(isSelf){
- if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
- if(skuType.equals(BillingClient.SkuType.INAPP)) {
- if(isSuccess){
- consumeAsync(tag,purchase.getPurchaseToken());
- }else if(isAutoAcknowledgePurchase){
- if(!purchase.isAcknowledged()){
- acknowledgePurchase(tag,purchase.getPurchaseToken());
- }
- }
- }else if(skuType.equals(BillingClient.SkuType.SUBS)){
- if(isAutoAcknowledgePurchase){
- if(!purchase.isAcknowledged()){
- acknowledgePurchase(tag,purchase.getPurchaseToken());
- }
- }
- }
- }else{
- log("未支付的订单:"+purchase.getSku());
- }
- }
- }
- }
- }
- return purchaseList;
- }
- }
- }
- return null;
- }
- //endregion
-
- //region===================================在线订单查询=================================
-
- /**
- * 异步联网查询所有的内购历史-无论是过期的、取消、等等的订单
- * @param listener 监听器
- * @return 返回false的时候说明网络出错
- */
- public boolean queryPurchaseHistoryAsyncInApp(PurchaseHistoryResponseListener listener){
- if(isReady()) {
- mBillingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP,listener);
- return true;
- }
- return false;
- }
-
- /**
- * 异步联网查询所有的订阅历史-无论是过期的、取消、等等的订单
- * @param listener 监听器
- * @return 返回false的时候说明网络出错
- */
- public boolean queryPurchaseHistoryAsyncSubs(PurchaseHistoryResponseListener listener){
- if(isReady()) {
- mBillingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.SUBS,listener);
- return true;
- }else{
- return false;
- }
- }
-
- //endregion
-
- //region===================================工具集合=================================
- /**
- * 获取有效订阅的数量
- * @return -1查询失败,0没有有效订阅,>0具有有效的订阅
- */
- public int getPurchasesSizeSubs(Activity activity)
- {
- List list = queryPurchasesSubs(activity);
- if(list!=null)
- {
- return list.size();
- }
- return -1;
- }
-
- /**
- * 通过sku获取订阅商品序号
- * @param sku sku
- * @return 序号
- */
- public int getSubsPositionBySku(String sku)
- {
- return getPositionBySku(sku, BillingClient.SkuType.SUBS);
- }
-
- /**
- * 通过sku获取内购商品序号
- * @param sku sku
- * @return 成功返回需要 失败返回-1
- */
- public int getInAppPositionBySku(String sku)
- {
- return getPositionBySku(sku, BillingClient.SkuType.INAPP);
- }
-
- private int getPositionBySku(String sku,String skuType)
- {
-
- if(skuType.equals(BillingClient.SkuType.INAPP))
- {
- int i = 0;
- for(String s:inAppSKUS)
- {
- if(s.equals(sku))
- {
- return i;
- }
- i++;
- }
- }
- else if(skuType.equals(BillingClient.SkuType.SUBS))
- {
- int i = 0;
- for(String s:subsSKUS)
- {
- if(s.equals(sku))
- {
- return i;
- }
- i++;
- }
- }
- return -1;
- }
-
- /**
- * 通过序号获取订阅sku
- * @param position 序号
- * @return sku
- */
- public String getSubsSkuByPosition(int position)
- {
- if(position>=0&&position=0&&position=0;i--){
- OnGoogleBillingListener listener = onGoogleBillingListenerList.get(i);
- if(listener.tag.equals(tag)){
- onGoogleBillingListenerList.remove(listener);
- }
- }
- onGoogleBillingListenerList.add(onGoogleBillingListener);
- return this;
- }
-
- public void removeOnGoogleBillingListener(OnGoogleBillingListener onGoogleBillingListener){
- onGoogleBillingListenerList.remove(onGoogleBillingListener);
- }
-
- public void removeOnGoogleBillingListener(Activity activity){
- String tag = getTag(activity);
- for(int i=onGoogleBillingListenerList.size()-1;i>=0;i--){
- OnGoogleBillingListener listener = onGoogleBillingListenerList.get(i);
- if(listener.tag.equals(tag)){
- removeOnGoogleBillingListener(listener);
- onGoogleBillingListenerMap.remove(tag);
- }
- }
- }
-
-
- /**
- * 清除内购监听器,防止内存泄漏-在Activity-onDestroy里面调用。
- * 需要确保onDestroy和build方法在同一个线程。
- */
- public void onDestroy(Activity activity){
- if(builder!=null) {
- builder.setListener(null);
- }
- if (activity != null)
- removeOnGoogleBillingListener(activity);
- }
-
- /**
- * Google购买商品回调接口(订阅和内购都走这个接口)
- */
- private class MyPurchasesUpdatedListener implements PurchasesUpdatedListener
- {
-
- public String tag ;
-
- @Override
- public void onPurchasesUpdated(BillingResult billingResult, @Nullable List list) {
- if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK&&list!=null)
- {
- for(Purchase purchase:list) {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- boolean isSelf = listener.tag.equals(tag);//是否是当前页面
- boolean isSuccess = listener.onPurchaseSuccess(purchase,isSelf);//是否自动消耗
- if(isSelf&&purchase.getPurchaseState()== Purchase.PurchaseState.PURCHASED){
- //是当前页面,并且商品状态为支付成功,才会进行消耗与确认的操作
- String skuType = getSkuType(purchase.getSku());
- if(BillingClient.SkuType.INAPP.equals(skuType)){
- if(isSuccess){
- //进行消耗
- consumeAsync(tag,purchase.getPurchaseToken());
- }else if(isAutoAcknowledgePurchase){
- //进行确认购买
- if(!purchase.isAcknowledged()){
- acknowledgePurchase(tag,purchase.getPurchaseToken());
- }
- }
- }else if(BillingClient.SkuType.SUBS.equals(skuType)){
- //进行确认购买
- if(isAutoAcknowledgePurchase){
- if(!purchase.isAcknowledged()){
- acknowledgePurchase(tag,purchase.getPurchaseToken());
- }
- }
- }
- }else if(purchase.getPurchaseState()== Purchase.PurchaseState.PENDING){
- log("待处理的订单:"+purchase.getSku());
- }
- }
- }
- }
- else
- {
- if(IS_DEBUG){
- log("购买失败,responseCode:"+billingResult.getResponseCode()+",msg:"+billingResult.getDebugMessage());
- }
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onFail(GoogleBillingListenerTag.PURCHASE,billingResult.getResponseCode(),listener.tag.equals(tag));
- }
- }
- }
-
- }
-
- /**
- * Google查询商品信息回调接口
- */
- private class MySkuDetailsResponseListener implements SkuDetailsResponseListener
- {
- private String skuType ;
- private String tag;
-
- public MySkuDetailsResponseListener(String skuType,String tag) {
- this.skuType = skuType;
- this.tag = tag;
- }
-
- @Override
- public void onSkuDetailsResponse(BillingResult billingResult, List list) {
- if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK&&list!=null)
- {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onQuerySuccess(skuType,list,listener.tag.equals(tag));
- }
- }
- else
- {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onFail(GoogleBillingListenerTag.QUERY,billingResult.getResponseCode(),listener.tag.equals(tag));
- }
- if(IS_DEBUG){
- log("查询失败,responseCode:"+billingResult.getResponseCode()+",msg:"+billingResult.getDebugMessage());
- }
- }
- }
-
- }
-
- /**
- * Googlg消耗商品回调
- */
- private class MyConsumeResponseListener implements ConsumeResponseListener
- {
- private String tag ;
-
- public MyConsumeResponseListener(String tag) {
- this.tag = tag;
- }
-
- @Override
- public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
- if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onConsumeSuccess(purchaseToken,listener.tag.equals(tag));
- }
- }else{
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onFail(GoogleBillingListenerTag.COMSUME,billingResult.getResponseCode(),listener.tag.equals(tag));
- }
- if(IS_DEBUG){
- log("消耗失败,responseCode:"+billingResult.getResponseCode()+",msg:"+billingResult.getDebugMessage());
- }
- }
- }
- }
-
- /**
- * Googlg消耗商品回调
- */
- private class MyAcknowledgePurchaseResponseListener implements AcknowledgePurchaseResponseListener{
-
- private String tag ;
-
- public MyAcknowledgePurchaseResponseListener(String tag) {
- this.tag = tag;
- }
-
- @Override
- public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
- if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onAcknowledgePurchaseSuccess(listener.tag.equals(tag));
- }
- }else{
- for(OnGoogleBillingListener listener:onGoogleBillingListenerList){
- listener.onFail(GoogleBillingListenerTag.AcKnowledgePurchase,billingResult.getResponseCode(),listener.tag.equals(tag));
- }
- if(IS_DEBUG){
- log("确认购买失败,responseCode:"+billingResult.getResponseCode()+",msg:"+billingResult.getDebugMessage());
- }
- }
- }
- }
-
- public enum GoogleBillingListenerTag{
-
- QUERY("query"),
- PURCHASE("purchase"),
- SETUP("setup"),
- COMSUME("comsume"),
- AcKnowledgePurchase("AcKnowledgePurchase"),
- ;
- public String tag ;
- GoogleBillingListenerTag(String tag){
- this.tag = tag;
- }
- }
-
- private static void log(String msg)
- {
- if(IS_DEBUG)
- {
- Log.e(TAG,msg);
- }
- }
-
- public static void isDebug(boolean isDebug){
- GoogleBillingUtil.IS_DEBUG = isDebug;
- }
-}
diff --git a/billing/src/main/java/com/tjbaobao/gitee/billing/OnGoogleBillingListener.java b/billing/src/main/java/com/tjbaobao/gitee/billing/OnGoogleBillingListener.java
deleted file mode 100644
index 197662a58..000000000
--- a/billing/src/main/java/com/tjbaobao/gitee/billing/OnGoogleBillingListener.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.tjbaobao.gitee.billing;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.android.billingclient.api.Purchase;
-import com.android.billingclient.api.SkuDetails;
-
-import java.util.List;
-
-/**
- * 作者:天镜baobao
- * 时间:2019/6/2 13:51
- * 说明:允许使用,但请遵循Apache License 2.0
- * 使用:
- * Copyright 2019 天镜baobao
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-public class OnGoogleBillingListener {
-
- @SuppressWarnings("WeakerAccess")
- public String tag = null;
-
- /**
- * 查询成功
- * @param skuType 内购或者订阅
- * @param list 商品列表
- * @param isSelf 是否是当前页面的结果
- */
- public void onQuerySuccess(@NonNull String skuType, @NonNull List list, boolean isSelf){}
-
- /**
- * 购买成功
- * @param purchase 商品
- * @param isSelf 是否是当前页面的结果
- *
- * @return 是否消耗,只有当isSelf为true,并且支付状态为{@link com.android.billingclient.api.Purchase.PurchaseState.PURCHASED}时,该值才会生效。
- */
- public boolean onPurchaseSuccess(@NonNull Purchase purchase, boolean isSelf){return true;}
-
- /**
- * 初始化成功
- * @param isSelf 是否是当前页面的结果
- */
- public void onSetupSuccess(boolean isSelf){}
-
- /**
- * 每次启动重新检查订单,返回有效的订单
- *
- * @param skuType 内购或者订阅
- * @param purchase 商品
- * @param isSelf 是否是当前页面的结果
- *
- * @return 是否自动消耗,只有当isSelf为true,并且支付状态为{@link com.android.billingclient.api.Purchase.PurchaseState.PURCHASED}时,该值才会生效。
- */
- public boolean onRecheck(@NonNull String skuType, @NonNull Purchase purchase, boolean isSelf) {
- return false;
- }
-
- /**
- * 链接断开
- */
- @SuppressWarnings("WeakerAccess")
- public void onBillingServiceDisconnected(){ }
-
- /**
- * 消耗成功
- * @param purchaseToken token
- * @param isSelf 是否是当前页面的结果
- */
- public void onConsumeSuccess(@NonNull String purchaseToken,boolean isSelf){}
-
-
- /**
- * 确认购买成功
- * @param isSelf 是否是当前页面的结果
- */
- public void onAcknowledgePurchaseSuccess(boolean isSelf){}
-
- /**
- * 失败回调
- * @param tag {@link GoogleBillingUtil.GoogleBillingListenerTag}
- * @param responseCode 返回码{https://developer.android.com/google/play/billing/billing_reference}
- * @param isSelf 是否是当前页面的结果
- */
- public void onFail(@NonNull GoogleBillingUtil.GoogleBillingListenerTag tag, int responseCode, boolean isSelf){}
-
- /**
- * google组件初始化失败等等。
- * @param tag {@link GoogleBillingUtil.GoogleBillingListenerTag}
- * @param isSelf 是否是当前页面的结果
- */
- public void onError(@NonNull GoogleBillingUtil.GoogleBillingListenerTag tag, boolean isSelf){}
-
-}
diff --git a/billing/src/main/java/com/tjbaobao/gitee/billing/PackInfo.java b/billing/src/main/java/com/tjbaobao/gitee/billing/PackInfo.java
deleted file mode 100644
index 5f6bda11f..000000000
--- a/billing/src/main/java/com/tjbaobao/gitee/billing/PackInfo.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.tjbaobao.gitee.billing;
-
-/**
- * 作者:TJbaobao
- * 时间:2019/1/5 14:41
- * 说明:
- * 使用:
- */
-public class PackInfo {
-}
diff --git a/billing/src/main/res/values/strings.xml b/billing/src/main/res/values/strings.xml
deleted file mode 100644
index 67943bc68..000000000
--- a/billing/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- GoogleBilling
-
diff --git a/billing/src/test/java/com/tjbaobao/gitee/billing/ExampleUnitTest.java b/billing/src/test/java/com/tjbaobao/gitee/billing/ExampleUnitTest.java
deleted file mode 100644
index cc1135713..000000000
--- a/billing/src/test/java/com/tjbaobao/gitee/billing/ExampleUnitTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.tjbaobao.gitee.billing;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see Testing documentation
- */
-public class ExampleUnitTest {
- @Test
- public void addition_isCorrect() {
- assertEquals(4, 2 + 2);
- }
-}
\ No newline at end of file