Android launchBillingFlow()无法';t显示Google Play购买屏幕

Android launchBillingFlow()无法';t显示Google Play购买屏幕,android,in-app-billing,android-billing,play-billing-library,Android,In App Billing,Android Billing,Play Billing Library,我正在我的应用程序中使用Google Play计费库。内部测试松弛类型中的应用程序松弛。但当我单击产品按钮时,launchBillingFlow()无法显示Google Play购买屏幕。单击后,代码直接跟随块的“//做点什么并返回菜单操作”部分。 我的应用程序配置行:首先,在我的清单中有一个“com.android.vending.BILLING”。其次我的gradle文件有一个当前版本的计费库;“实现'com.android.billingclient:billing:2.0.3'”。但我不

我正在我的应用程序中使用Google Play计费库。内部测试松弛类型中的应用程序松弛。但当我单击产品按钮时,launchBillingFlow()无法显示Google Play购买屏幕。单击后,代码直接跟随块的“//做点什么并返回菜单操作”部分。 我的应用程序配置行:首先,在我的清单中有一个“com.android.vending.BILLING”。其次我的gradle文件有一个当前版本的计费库;“实现'com.android.billingclient:billing:2.0.3'”。但我不知道为什么仍然不能显示购买屏幕。 我的代码如下

 import android.content.Intent;
import android.content.SharedPreferences;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchaseHistoryResponseListener;
import com.android.billingclient.api.PurchasesUpdatedListener;
import com.android.billingclient.api.SkuDetails;
import com.android.billingclient.api.SkuDetailsParams;
import com.android.billingclient.api.SkuDetailsResponseListener;
import com.ynapp.yesornoapp.R;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MyProductActivity extends AppCompatActivity  implements PurchasesUpdatedListener {
    //PREMIUM PRODUCTS
    Button btProduct;
    public static final String PR_PREFS_PRODUCT_ONE = "ProductOne";
    SharedPreferences prefs_product_one;
    //Will be used for in-app purchases.
    List<SkuDetails> skuDetailsList;
    BillingClient billingClient;
    Intent itMain;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        themeUtils.onActivityCreateSetTheme(this);
        setContentView(R.layout.activity_my_product);
        setupBillingClient();
        btProduct = (Button)findViewById(R.id.buttonforest);
    }

    public void onClickTheme(View view){
        SharedPreferences sharedPref = getSharedPreferences("MyData",MODE_PRIVATE);//MODE_PRIVATE
        final SharedPreferences.Editor editor = sharedPref.edit();
        switch (view.getId()){
            case R.id.buttonproductone:
                //önceden ödeme yapılıp yapılmadığını sorguluyoruz
                prefs_product_one= getSharedPreferences(PR_PREFS_PRODUCT_ONE,MODE_PRIVATE);
                final int product_one_flag = prefs_product_one.getInt("productone",0);
                List<String> skuList = new ArrayList<>();
                skuList.add("purch_product_one");

                if(billingClient.isReady() && product_one_flag==0){
                    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP).build();

                    billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
                        @Override
                        public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
                            if(billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK &&
                            skuDetailsList != null){
                                for(SkuDetails skuDetails: skuDetailsList){
                                    String sku = skuDetails.getSku();
                                    String price = skuDetails.getPrice();
                                    if("prefs_product_one".equals(sku)){
                                        Toast.makeText(MyProductActivity.this, sku + ": " + price, Toast.LENGTH_SHORT).show();
                                        BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                                                .setSkuDetails(skuDetails)
                                                .build();
                                        BillingResult billingResponseCode = billingClient.launchBillingFlow(MyProductActivity.this, flowParams);
                                        if (billingResponseCode.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                                            //DO SOMETHING AND RETURN MENU OPERATIONS
                                        }
                                    }
                                }
                            }

                        }

                    });
                }
                else{
                    if(product_one_flag ==0)
                        Toast.makeText(MyProductActivity.this, "Cannot query product", Toast.LENGTH_SHORT).show();
                    else{
                        Toast.makeText(getApplicationContext(),btProduct.getText().toString(),Toast.LENGTH_SHORT).show();
                    }
                }
                break;
        }
    }

    public  void setupBillingClient(){
        billingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {

                    Toast.makeText(MyProductActivity.this, "Success to connect Billing", Toast.LENGTH_SHORT).show();
                }
            }
            @Override
            public void onBillingServiceDisconnected() {

            }
        });
    }


    @Override
    public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {

    }
}
导入android.content.Intent;
导入android.content.SharedReferences;
导入androidx.annotation.Nullable;
导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入android.view.view;
导入android.view.Window;
导入android.view.WindowManager;
导入android.widget.Button;
导入android.widget.Toast;
导入com.android.billingclient.api.billingclient;
导入com.android.billingclient.api.BillingClientStateListener;
导入com.android.billingclient.api.BillingFlowParams;
导入com.android.billingclient.api.BillingResult;
导入com.android.billingclient.api.Purchase;
导入com.android.billingclient.api.PurchaseHistoryResponseListener;
导入com.android.billingclient.api.PurchasesUpdatedListener;
导入com.android.billingclient.api.sku详细信息;
导入com.android.billingclient.api.sku;
导入com.android.billingclient.api.SkuDetailsResponseListener;
导入com.ynapp.yesornoapp.R;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
公共类MyProductActivity扩展AppCompatActivity实现PurchasesUpdatedListener{
//优质产品
按钮产品;
公共静态最终字符串PR_PREFS_PRODUCT_ONE=“ProductOne”;
共享参考优先于产品;
//将用于应用内购买。
详细列表;
BillingClient BillingClient;
意图主要;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
themeUtils.onActivityCreateSetheme(this);
setContentView(R.layout.activity\u my\u product);
setupBillingClient();
btProduct=(按钮)findViewById(R.id.buttonforest);
}
公共void onclick主题(视图){
SharedReferences SharedReferences=GetSharedReferences(“MyData”,MODE_PRIVATE);//MODE_PRIVATE
最终SharedReferences.Editor=SharedReference.edit();
开关(view.getId()){
案例R.id.buttonproductone:
//恩塞登·德梅·亚普·亚普·亚普·勒马德·萨尔古卢约鲁兹
prefs_product_one=GetSharedReferences(PR_prefs_product_one,MODE_PRIVATE);
final int product_one_flag=prefs_product_one.getInt(“productone”,0);
List skuList=new ArrayList();
skuList.添加(“采购产品”);
if(billingClient.isReady()&&product\u one\u标志==0){
SkuDetailsParams.Builder params=SkuDetailsParams.newBuilder();
params.setskulist(skuList).setType(BillingClient.SkuType.INAPP).build();
billingClient.querySkuDetailsAsync(params.build(),新SkuDetailsResponseListener()){
@凌驾
公共无效onSkuDetailsResponse(BillingResult BillingResult,列表skuDetailsList){
如果(billingResult.getResponseCode()==BillingClient.BillingResponseCode.OK&&
skuDetailsList!=空){
用于(SkuDetails SkuDetails:skuDetailsList){
字符串sku=skuDetails.getSku();
字符串price=skuDetails.getPrice();
如果(“首选产品”。等于(sku)){
Toast.makeText(MyProductActivity.this,sku+):“+price,Toast.LENGTH\u SHORT.show();
BillingFlowParams flowParams=BillingFlowParams.newBuilder()
.详细信息(SKU详细信息)
.build();
BillingResult billingResponseCode=billingClient.launchBillingFlow(MyProductActivity.this,flowParams);
if(billingResponseCode.getResponseCode()==BillingClient.billingResponseCode.OK){
//执行某些操作并返回菜单操作
}
}
}
}
}
});
}
否则{
if(产品标志=0)
Toast.makeText(MyProductActivity.this,“无法查询产品”,Toast.LENGTH_SHORT.show();
否则{
Toast.makeText(getApplicationContext(),btProduct.getText().toString(),Toast.LENGTH_SHORT).show();
}
}
打破
}
}
public void setupBillingClient(){
billingClient=billingClient.newBuilder(this.enablePendingPurchases().setListener(this.build());
startConnection(新的BillingClientStateListener()){
@凌驾
BillingSetupFinished(BillingResult BillingResult)上的公共无效{
if(billingResult.getResponseCode()==BillingClient.BillingResponseCode.OK){
Toast.makeText(MyProductActivity.this,“连接计费成功”,Toast.LENGTH\u SHORT).s