
public class MainActivity2 extends AppCompatActivity implements PurchasesUpdatedListener {
// Покупка
private final Map<QueryProductDetailsParams.Product, ArrayList<QueryProductDetailsParams.Product>> mSkuDetailsMap = new HashMap<>();
ProgressBar progressBar;
public static final String PRODUCT_ID1 = "purchase111";
public static final String PRODUCT_ID2 = "purchase222";
private BillingClient billingClient;
ConnectionDetector cd;
private Vibrator Vibro;
@Override
protected void onDestroy() {
super.onDestroy();
{ if (billingClient!=null)
{ billingClient.endConnection();
Toast.makeText(MainActivity2.this, ("Служба отключена"), Toast.LENGTH_SHORT).show();}}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
cd = new ConnectionDetector(this);
TextView button1 = findViewById(R.id.button);
TextView button2 = findViewById(R.id.button2);
if (cd.isConnected()) {
progressBar = findViewById(R.id.progressBar);
progressBar.setVisibility(View.VISIBLE);
TextView textView2 = findViewById(R.id.textView2);
textView2.setVisibility(View.VISIBLE);
button1.setClickable(false);
button2.setClickable(false);
purchase(null);
}
else
{ Toast.makeText(MainActivity2.this, (R.string.internet_not_activity), Toast.LENGTH_SHORT).show();
button1.setClickable(false);
button2.setClickable(false);
new CountDownTimer(3000, 1) {
public void onTick(long l)
{}
public void onFinish()
{finish();}
}.start();
}
}
public void purchase(View view) {
// Устанавливаем соединение с клиентом биллинга
// проверяем статус покупки из кеша Google Play Store
// чтобы проверить, был ли товар уже приобретен ранее или возвращен
billingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
QueryPurchasesParams queryPurchasesParams = QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.INAPP).build();
billingClient.queryPurchasesAsync(queryPurchasesParams, (billingResult1, list) -> runOnUiThread(() -> {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
if (list.size() > 0) {
initiatePurchase();
Toast.makeText(MainActivity2.this, ("Служба включена"), Toast.LENGTH_SHORT).show();
}}
else
{ Toast.makeText(getApplicationContext(), "\n" + "Ошибка " + billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show();}
}
));
}
@Override
public void onBillingServiceDisconnected() { }
});
}
private void initiatePurchase() {
List<String> skuList = Arrays.asList(PRODUCT_ID1, PRODUCT_ID2);
ArrayList<QueryProductDetailsParams.Product> productList = new ArrayList<>();
for(String sku : skuList) {
productList.add(
QueryProductDetailsParams.Product.newBuilder()
.setProductId(sku)
.setProductType(BillingClient.ProductType.INAPP)
.build()
);
}
QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder()
.setProductList(productList)
.build();
billingClient.queryProductDetailsAsync(params, (billingResult, productDetailsList) -> {
QueryPurchasesParams queryPurchasesParams = QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.INAPP).build();
billingClient.queryPurchasesAsync(queryPurchasesParams, (billingResult1, list) -> runOnUiThread(() -> {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK)
{
for (QueryProductDetailsParams.Product skuDetails : productList) {
mSkuDetailsMap.put(skuDetails,productList);
}
progressBar.setVisibility(View.GONE);
TextView textView2 = findViewById(R.id.textView2);
textView2.setVisibility(View.GONE);
TextView button1 = findViewById(R.id.button);
TextView button2 = findViewById(R.id.button2);
button1.setClickable(true);
button2.setClickable(true);
vibro();
if (productList.size() <= 0)
{
// пытаемся добавить элемент / идентификатор продукта "покупка" внутри управляемого продукта в консоли Google Play
Toast.makeText(getApplicationContext(),"\n" + "Товар не найден",Toast.LENGTH_SHORT).show();
}}
else
{ Toast.makeText(getApplicationContext(), " \n" + "Ошибка "+billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show(); }
}));
});
}
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
// если товар только что куплен
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null)
{
handlePurchases(purchases);
}
// если покупка отменена
else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED)
{
Toast.makeText(getApplicationContext(),"Покупка отменена",Toast.LENGTH_SHORT).show();
}
}
void handlePurchases(List<Purchase> purchases) {
for(Purchase purchase:purchases) {
//если товар куплен
//////////////////////////////////////////////////////////////////////////////////////////////////////
if (PRODUCT_ID1.equals(purchase.getProducts().get(0)) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)
{
// если товар куплен и не подтвержден
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
billingClient.acknowledgePurchase(acknowledgePurchaseParams, ackPurchase);
}
// иначе товар куплен и также подтвержден
// Предоставление пользователю права на покупку товара
payComplete1(null);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
if (PRODUCT_ID2.equals(purchase.getProducts().get(0)) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)
{
// если товар куплен и не подтвержден
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
billingClient.acknowledgePurchase(acknowledgePurchaseParams, ackPurchase);
}
// иначе товар куплен и также подтвержден
// Предоставление пользователю права на покупку товара
payComplete2(null);
}
}
}
AcknowledgePurchaseResponseListener ackPurchase = billingResult -> {};
public void one(View view){
Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
Vibro.vibrate(50);
ImmutableList productDetailsParamsList =
ImmutableList.of(
BillingFlowParams.ProductDetailsParams.newBuilder()
// retrieve a value for "productDetails" by calling queryProductDetailsAsync()
.setProductDetails(productDetails)
// to get an offer token, call ProductDetails.getSubscriptionOfferDetails()
// for a list of offers that are available to the user
.build()
);
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(productDetailsParamsList)
.build();
// Launch the billing flow
BillingResult billingResult = billingClient.launchBillingFlow(this, billingFlowParams);
}
public void two(View view){
Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
Vibro.vibrate(50);
}
public void payComplete1(View view)
{ Toast.makeText(getApplicationContext(), "\n" + " payComplete1 - Товар куплен 1", Toast.LENGTH_SHORT).show();}
public void payComplete2(View view)
{ Toast.makeText(getApplicationContext(), "\n" + " payComplete2 - Товар куплен 2", Toast.LENGTH_SHORT).show();}
public void vibro(){
Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
Vibro.vibrate(50);
}
}