Android 未调用应用内付费onPurchaseUpdated
我正在测试一个应用程序进行应用内计费,我在google play控制台中设置了我的帐户,一切正常,购买成功,但最后一个方法Android 未调用应用内付费onPurchaseUpdated,android,in-app-purchase,in-app-billing,Android,In App Purchase,In App Billing,我正在测试一个应用程序进行应用内计费,我在google play控制台中设置了我的帐户,一切正常,购买成功,但最后一个方法onPurchasesUpdated我不知道它是否调用,但我没有收到任何祝酒词,所以可能它没有调用。我的代码有问题吗?该应用程序告诉我购买成功时如何编写代码 public class MainActivity extends AppCompatActivity implements PurchasesUpdatedListener { BillingClient mBill
onPurchasesUpdated
我不知道它是否调用,但我没有收到任何祝酒词,所以可能它没有调用。我的代码有问题吗?该应用程序告诉我购买成功时如何编写代码
public class MainActivity extends AppCompatActivity implements PurchasesUpdatedListener {
BillingClient mBillingClient;
private Button mBtnBuy;
private String product = "product_test_4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnBuy = findViewById(R.id.mBtn_buy);
mBtnBuy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener(new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
}
}).build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(int responseCode) {
startPurchase();
}
@Override
public void onBillingServiceDisconnected() {
}
});
}
});
}
public void startPurchase() {
List<String> skuList = new ArrayList<>();
skuList.add(product);
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) {
if (responseCode == BillingClient.BillingResponse.OK
&& skuDetailsList != null) {
for (SkuDetails skuDetails : skuDetailsList) {
String sku = skuDetails.getSku();
String price = skuDetails.getPrice();
if (product.equals(sku)) {
}
}
}
}
// Process the result.
});
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSku(product)
.setType(BillingClient.SkuType.INAPP) // SkuType.SUB for subscription
.build();
int responseCode = mBillingClient.launchBillingFlow(MainActivity.this, flowParams);
}
@Override
public void onPurchasesUpdated(@BillingClient.BillingResponse int responseCode, List<Purchase> purchases) {
if (responseCode == BillingClient.BillingResponse.OK
&& purchases != null) {
Toast.makeText(this, "purchase success", Toast.LENGTH_SHORT).show();
Log.d("tag","purchase success");
} else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
// Handle an error caused by a user cancelling the purchase flow.
Toast.makeText(this, "purchase cancelled", Toast.LENGTH_SHORT).show();
Log.d("tag","purchase cancelled");
} else {
// Handle any other error codes.
Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
Log.d("tag","purchase error");
}
}
}
公共类MainActivity扩展AppCompative实现PurchasesUpdatedListener{
计费客户端mBillingClient;
私人按钮mBtnBuy;
私有字符串product=“产品测试4”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnBuy=findviewbyd(R.id.mBtn_-buy);
mBtnBuy.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
mBillingClient=BillingClient.newBuilder(MainActivity.this).setListener(新的PurchasesUpdatedListener(){
@凌驾
公共无效onPurchasesUpdated(int responseCode,@Nullable List purchases){
}
}).build();
mBillingClient.startConnection(新的BillingClientStateListener(){
@凌驾
已完成BillingSetupFinished(int响应代码)上的公共无效{
startPurchase();
}
@凌驾
公共无效onBillingServiceDisconnected(){
}
});
}
});
}
公共无效startPurchase(){
List skuList=new ArrayList();
skuList.add(产品);
SkuDetailsParams.Builder params=SkuDetailsParams.newBuilder();
参数setskulist(skuList).setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
新SkuDetailsResponseListener(){
@凌驾
公共无效onSkuDetailsResponse(内部响应代码,列表skuDetailsList){
if(responseCode==BillingClient.BillingResponse.OK
&&skuDetailsList!=空){
用于(SkuDetails SkuDetails:skuDetailsList){
字符串sku=skuDetails.getSku();
字符串price=skuDetails.getPrice();
if(产品等于(sku)){
}
}
}
}
//处理结果。
});
BillingFlowParams flowParams=BillingFlowParams.newBuilder()
.setSku(产品)
.setType(BillingClient.SkuType.INAPP)//SkuType.SUB用于订阅
.build();
int responseCode=mBillingClient.launchBillingFlow(MainActivity.this,flowParams);
}
@凌驾
购买时的公共无效日期(@BillingClient.BillingResponse int responseCode,列出购买){
if(responseCode==BillingClient.BillingResponse.OK
&&购买!=空){
Toast.makeText(这是“购买成功”,Toast.LENGTH_SHORT).show();
Log.d(“标记”、“购买成功”);
}else if(responseCode==BillingClient.BillingResponse.USER\u已取消){
//处理由用户取消采购流程引起的错误。
Toast.makeText(这是“购买已取消”,Toast.LENGTH_SHORT).show();
日志d(“标签”、“采购取消”);
}否则{
//处理任何其他错误代码。
Toast.makeText(此“错误”,Toast.LENGTH_SHORT).show();
Log.d(“标签”、“采购错误”);
}
}
}
您正在mBtnBuy onClick中设置PurchasesUpdatedListener
mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener(new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
}
}).build();
mBillingClient=BillingClient.newBuilder(MainActivity.this.setListener)(新的PurchasesUpdatedListener(){
@凌驾
公共无效onPurchasesUpdated(int responseCode,@Nullable List purchases){
}
}).build();
因此,该方法将在购买时调用,而不是在上次购买时调用
您可以执行mBillingClient=BillingClient.newBuilder(MainActivity.this.setListener().build()代码>这样,然后将调用最后一个onPurchasesUpdated