новичок в Android разработке и попытке реализовать IAP для моего приложения. После долгих поисков и попыток найти современные инструкции мне удалось собрать воедино следующий код:
public class MainActivity extends AppCompatActivity implements PurchasesUpdatedListener {
String SKU_UNLOCK = "unlock_all_features";
BillingClient mBillingClient;
Button buyBtn;
mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener(this).enablePendingPurchases().build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
Toast.makeText(MainActivity.this, "Successfully connected to Billing Service", Toast.LENGTH_SHORT).show();
} else
Toast.makeText(MainActivity.this, "Failed connection to Billing Service", Toast.LENGTH_SHORT).show();
}
@Override
public void onBillingServiceDisconnected() {
Toast.makeText(MainActivity.this, "Disconnected from Billing Service", Toast.LENGTH_SHORT).show();
}
});
List<String> skuList = new ArrayList<>();
skuList.add(SKU_UNLOCK);
final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult,
List<SkuDetails> skuDetailsList) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
for (SkuDetails skuDetails : skuDetailsList) {
String price = skuDetails.getPrice();
}
}
}
});
buyBtn = (Button) findViewById(R.id.buyBtn);
buyBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Setup the Billing Flow Params
}
});
}
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
&& purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
// Handle an error caused by a user cancelling the purchase flow.
} else {
// Handle any other error codes.
}
}
public void handlePurchase(Purchase purchase) {
if (purchase.getSku().equals(SKU_UNLOCK)) {
// Unlock the the premium app features and hide the buyBtn
}
}
Моя главная проблема на данный момент, и вот где я действительно застрял в том, что я не не знаю, как настроить BillingFlowParams для метода buyBthn. Некоторые инструкции, которые я нашел, кажутся устаревшими.