Я пытался запрограммировать рабочую систему магазина в течение нескольких дней, но я вижу, что клиент биллинга не подключен.
Тост сообщение здесь об ошибке подключения к биллингу.
Где ошибка?
Нужен ли мне класс помощи? Во многих инструкциях говорится, что вы можете использовать справочную систему, но не обязаны.
С какой возможностью можно выполнить для каждой статьи другой код, если Актикель был куплен?
Я хотел бы предложить шесть цифровых продуктов, которые пользователь может купить.
спасибо за вашу помощь.
Вот мой код ShopActivity.class:
public class ShopActivity extends AppCompatActivity implements PurchasesUpdatedListener {
private BillingClient billingClient;
Button loadProdukt;
RecyclerView recyclerProdukt;
// IabHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shop);
// String base64EncodedPublicKey = "_BASE64_KEY_";
// mHelper = new IabHelper(this, base64EncodedPublicKey);
// TODO 01.07.2019 IabHelper?
setupBillingClient();
loadProdukt = findViewById(R.id.btn_load_produkt);
recyclerProdukt = findViewById(R.id.recycler_view_paket);
recyclerProdukt.setHasFixedSize(true);
recyclerProdukt.setLayoutManager(new LinearLayoutManager(this));
// event
loadProdukt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(billingClient.isReady()){
SkuDetailsParams params = SkuDetailsParams.newBuilder()
.setSkusList(Arrays.asList("10_coins","20_coins","30_coins","40_coins","80_coins","200_coins"))
.setType(BillingClient.SkuType.INAPP)
.build();
billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
if (billingResult.getResponseCode() == BilllingResonse.OK) {
loadProduktToRecyclerView(skuDetailsList);
}else{
Toast.makeText(ShopActivity.this, "Cannot query product", Toast.LENGTH_SHORT).show();
}
}
});
}else{
Toast.makeText(ShopActivity.this, "Billing not ready", Toast.LENGTH_SHORT).show();
}
}
});
}
private void loadProduktToRecyclerView(List<SkuDetails> skuDetailsList) {
ProduktAdapter adapter = new ProduktAdapter(this, skuDetailsList,billingClient);
recyclerProdukt.setAdapter(adapter);
}
private void setupBillingClient() {
// billingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
billingClient = BillingClient.newBuilder(this).setListener(this).build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BilllingResonse.OK) {
Toast.makeText(ShopActivity.this, "Success to connect Billing", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(ShopActivity.this, "Error not connect to Billing", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBillingServiceDisconnected() {
Toast.makeText(ShopActivity.this, "You are disconnect.", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
// if user click Buy, we will retrieve data here
Toast.makeText(this, "Purchase item: "+purchases.size(), Toast.LENGTH_SHORT).show();
if (billingResult.getResponseCode() == BillingResponse.OK && purchases != null) {
for ( Purchase purchases : purchases) {
handlePurchase (purchases);
}
}else if (billingResult.getResponseCode() == BillingResponse.USER_CANCELED) {
}else{
}
}
}