Пытаюсь обновить Google Play Billing Library с 3 на 5 (Не подтверждает покупки )
public class MainActivity2 extends AppCompatActivity implements PurchasesUpdatedListener {
// Покупка
private Map<String, SkuDetails> 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)
{}
else
{ 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 = (TextView) findViewById(R.id.button);
TextView button2 = (TextView) findViewById(R.id.button2);
if (cd.isConnected()) {
progressBar = (ProgressBar) findViewById(R.id.progressBar);
progressBar.setVisibility(View.VISIBLE);
TextView textView2 = (TextView) 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) {
billingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
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 = new ArrayList<>();
skuList.add(PRODUCT_ID1);
skuList.add(PRODUCT_ID2);
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(INAPP);
billingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult,
List<SkuDetails> skuDetailsList) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK)
{
QueryPurchasesParams queryPurchasesParams = QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.INAPP).build();
billingClient.queryPurchasesAsync(queryPurchasesParams, (billingResult1, list) -> runOnUiThread(() -> {
for (SkuDetails skuDetails : skuDetailsList) {
mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
}
progressBar.setVisibility(View.GONE);
TextView textView2 = (TextView) findViewById(R.id.textView2);
textView2.setVisibility(View.GONE);
TextView button1 = (TextView) findViewById(R.id.button);
TextView button2 = (TextView) findViewById(R.id.button2);
button1.setClickable(true);
button2.setClickable(true);
}));
vibro();
if (skuDetailsList != null && skuDetailsList.size() > 0)
{ }
else{
// пытаемся добавить элемент / идентификатор продукта "покупка" внутри управляемого продукта в консоли 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();
}
//Обработка любых других сообщений об ошибках
else
{ }
}
void handlePurchases(List<Purchase> purchases) {
for(Purchase purchase:purchases) {
//если товар куплен
//////////////////////////////////////////////////////////////////////////////////////////////////////
if (PRODUCT_ID1.equals(purchase.getSkus()) && 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.getSkus()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)
{
// если товар куплен и не подтвержден
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
billingClient.acknowledgePurchase(acknowledgePurchaseParams, ackPurchase);
}
// иначе товар куплен и также подтвержден
// Предоставление пользователю права на покупку товара
payComplete2(null);
}
}
}
AcknowledgePurchaseResponseListener ackPurchase = new AcknowledgePurchaseResponseListener() {
@Override
public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
if(billingResult.getResponseCode()==BillingClient.BillingResponseCode.OK){
// Предоставление прав пользователю.
}
}
};
public void one(View view){
Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
Vibro.vibrate(50);
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(mSkuDetailsMap.get(PRODUCT_ID1))
.build();
billingClient.launchBillingFlow(MainActivity2.this, flowParams);
}
public void two(View view){
Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
Vibro.vibrate(50);
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(mSkuDetailsMap.get(PRODUCT_ID2))
.build();
billingClient.launchBillingFlow(MainActivity2.this, flowParams);
}
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);
}
}
Источник: Stack Overflow на русском