为什么 Android IAP 初始化但不工作?

Why Android IAP initializing but not working?

我正在使用这个库在我的应用中实现应用内购买。

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");

代码没有 运行 onProductPurchased 方法。它只有 运行s onBillingInitialized 方法。我看起来很冗长 logcat。当我看到 initialized 行时,没有关于 purchased 的行。

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

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, resultCode, data);
  }  
}

祝你好运!