Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何使用base64进行应用内计费?我需要它吗?_Java_Android_Android Pay_Android Billing - Fatal编程技术网

Java 我如何使用base64进行应用内计费?我需要它吗?

Java 我如何使用base64进行应用内计费?我需要它吗?,java,android,android-pay,android-billing,Java,Android,Android Pay,Android Billing,我已经尝试编程一个工作车间系统好几天了,但是我看到计费客户端没有连接。 此处的Toast消息是连接到帐单时出错 错在哪里 我需要帮助课程吗?在许多说明中,都说可以使用帮助类,但不一定要使用 如果购买了Aktikel,那么有哪种可能性可以对每篇文章执行另一个代码 我想提供六个用户可以购买的数字产品 谢谢你的帮助 这是我的ShopActivity.class代码: AIDL不推荐使用 public class ShopActivity extends AppCompatActivity implem

我已经尝试编程一个工作车间系统好几天了,但是我看到计费客户端没有连接。 此处的Toast消息是连接到帐单时出错

错在哪里

我需要帮助课程吗?在许多说明中,都说可以使用帮助类,但不一定要使用

如果购买了Aktikel,那么有哪种可能性可以对每篇文章执行另一个代码

我想提供六个用户可以购买的数字产品

谢谢你的帮助

这是我的ShopActivity.class代码:

AIDL不推荐使用

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{

        }
    }
}