Как использовать base64 для биллинга в приложении и нужно ли это мне? - PullRequest
0 голосов
/ 01 июля 2019

Я пытался запрограммировать рабочую систему магазина в течение нескольких дней, но я вижу, что клиент биллинга не подключен. Тост сообщение здесь об ошибке подключения к биллингу.

Где ошибка?

Нужен ли мне класс помощи? Во многих инструкциях говорится, что вы можете использовать справочную систему, но не обязаны.

С какой возможностью можно выполнить для каждой статьи другой код, если Актикель был куплен?

Я хотел бы предложить шесть цифровых продуктов, которые пользователь может купить.

спасибо за вашу помощь.

Вот мой код 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{

        }
    }
}

1 Ответ

1 голос
/ 01 июля 2019

AIDL устарело. Google Play Billing Library

...