为什么Android IAP会初始化但无法正常工作?

问题描述

我正在使用此库在我的应用程序中实现应用程序购买。

https://github.com/anjlab/android-inapp-billing-v3

我将此代码添加到了gradle中。

repositories {
  mavenCentral()
}
dependencies {
  implementation 'com.anjlab.android.iab.v3:library:1.0.44'
}

添加了权限。

 <uses-permission android:name="com.android.vending.BILLING" />

我声明了变量

 BillingProcessor bp;

在setContentView之后,我在onCreate方法中使用(测试过)bp

   setContentView(R.layout.activity_main);



   bp = new BillingProcessor(this,"x",null,new BillingProcessor.IBillingHandler() {
            @Override
            public void onProductPurchased(@NonNull String productId,@Nullable TransactionDetails details) {
                Log.d("purchase2","purchased");
            }
            @Override
            public void onBillingError(int errorCode,@Nullable Throwable error) {
                Log.d("purchase2","error");
            }
            @Override
            public void onBillingInitialized() {
                Log.d("purchase2","initialized");
            }
            @Override
            public void onPurchaseHistoryRestored() {
                Log.d("purchase2","historyrestored");
            }
        });


        bp.purchase(this,"y");

代码无法在ProductPurchased方法上运行。它仅运行onBillingInitialized方法。我看上去很冗长。当我看到已初始化行时,没有关于已购买的行。

结果,我该如何解决我的问题?为什么不起作用?

X和Y值正确,我在Google Play控制台中对其进行了检查。

解决方法

我认为你应该打电话

bp.initialize();

在这样的oncreate中

    setContentView(R.layout.activity_main);
    
    
    
       bp = new BillingProcessor(this,"x",null,new BillingProcessor.IBillingHandler() {
                @Override
                public void onProductPurchased(@NonNull String productId,@Nullable TransactionDetails details) {
                    Log.d("purchase2","purchased");
                }
                @Override
                public void onBillingError(int errorCode,@Nullable Throwable error) {
                    Log.d("purchase2","error");
                }
                @Override
                public void onBillingInitialized() {
                    Log.d("purchase2","initialized");
                }
                @Override
                public void onPurchaseHistoryRestored() {
                    Log.d("purchase2","historyrestored");
                }
            });

bp.initialize();

并致电

bp.purchase(this,"y");

在按钮单击事件中。

您还应该覆盖Activity的onActivityResult方法:

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
  if (!bp.handleActivityResult(requestCode,resultCode,data)) {
    super.onActivityResult(requestCode,data);
  }  
}

祝你好运!