Android InApp Purcahse问题:为什么显示未解决的引用:BillingFlowParams的setType?
在android中使用计费库并购买订阅而不是应用程序内产品(耗材-非耗材),将Android InApp Purcahse问题:为什么显示未解决的引用:BillingFlowParams的setType?,android,in-app-purchase,in-app-billing,in-app-subscription,android-inapp-purchase,Android,In App Purchase,In App Billing,In App Subscription,Android Inapp Purchase,在android中使用计费库并购买订阅而不是应用程序内产品(耗材-非耗材),将.setType(SkuType.SUBS)添加到计费流程参数,如下所示: val billingFlowParams = BillingFlowParams .newBuilder() .setType(SkuType.SUBS)
.setType(SkuType.SUBS)
添加到计费流程参数
,如下所示:
val billingFlowParams = BillingFlowParams
.newBuilder()
.setType(SkuType.SUBS)
.setSkuDetails(skuDetailsList!![i])
.build()
但是,.setType(SkuType.SUBS)
显示未解析的引用:setType
可能是什么问题如何启动应用内订阅的购买流?请尝试
BillingClient.SkuType.SUBS
您可以像下面这样启动购买流
billingClient.launchBillingFlow(this, billingFlowParams).getResponseCode();
@Override
public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
//Purchase Acknowledged and verified
} else {
Toast.makeText(this, "Purchase Failed", Toast.LENGTH_LONG).show();
}
Log.e("Acknowledged Purchase:", billingResult.toString());
}
如果我们再深入一点,
-顺便说一句,它是用java编写的 首先,您必须在类中实现
PurchasesUpdatedListener、AcknowledgePurchaseResponseListener
,并重写onPurchasesUpdated
和onAcknowledgePurchaseResponse
方法。
然后初始化计费客户端
private void initBilling() {
billingClient = BillingClient.newBuilder(this)
.enablePendingPurchases()
.setListener(this)
.build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
Purchase.PurchasesResult purchasesResult = billingClient.queryPurchases(BillingClient.SkuType.SUBS);
billingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.SUBS, (billingResult1, purchaseHistoryRecordList) -> {
Log.i("SKURESLUT", purchaseHistoryRecordList.toString());
});
}
}
@Override
public void onBillingServiceDisconnected() {
}
});
}
然后您可以将所需的包id传递给以下方法并启动billingFlow
private void getBillingPackage(String id) {
List<String> productIdsList = new ArrayList<>();
productIdsList.add(id);
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(productIdsList).setType(BillingClient.SkuType.SUBS);
billingClient.querySkuDetailsAsync(params.build(),
(result, skuDetailsList) -> {
if (!skuDetailsList.isEmpty()) {
mSkuDetails.addAll(skuDetailsList);
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetailsList.get(0))
.build();
int responseCode = billingClient.launchBillingFlow(this, billingFlowParams).getResponseCode();
} else {
Toast.makeText(this, "Requested package not available", Toast.LENGTH_LONG).show();
}
Log.e("SKURESLUT", result.toString());
});
}
它会给您一个错误,因为在
Builder
类上没有名为setType
的方法。请参阅此处:但是,如果我想启动订阅的购买流而不是应用内产品(耗材非消费品),该怎么办?什么是mSkuDetails?这是我从querySkuDetailsAsync接收的本地数组列表。别理他,兄弟。事实上,我也在做同样的事情,但有一个小错误。顺便说一句,从你的答案中知道一些新的代码行。谢谢。这里有一个问题:在onBillingSetupFinished方法中,我们将获得用户先前购买的商品,对吗?
@Override
public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
//Purchase Acknowledged and verified
} else {
Toast.makeText(this, "Purchase Failed", Toast.LENGTH_LONG).show();
}
Log.e("Acknowledged Purchase:", billingResult.toString());
}