我想举一个只有订阅者才能看到的活动示例。我想为此使用Google应用内结算库。我试图继续使用Google文档,但是遇到了问题。
'''公共类MainActivity扩展AppCompatActivity实现PurchasesUpdatedListener {
private BillingClient billingClient;
String vipUpgradeOnePrice, vipUpgradeTwoPrice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
billingClient=BillingClient.newBuilder(MainActivity.this).setListener(this).build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK)
Toast.makeText(MainActivity.this, "WORK", Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this, "ERROR", Toast.LENGTH_SHORT).show();
}
@Override
public void onBillingServiceDisconnected() {
Toast.makeText(MainActivity.this, "DISCONECTED", Toast.LENGTH_SHORT).show();
}
});
List<String> skuList=new ArrayList<>();
skuList.add("vip_upgrade_one");
skuList.add("vip_upgrade_two");
SkuDetailsParams.Builder params=SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS);
billingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
//Process the Result
if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK && skuDetailsList != null){
for (SkuDetails skuDetails : skuDetailsList){
String sku=skuDetails.getSku();
String price=skuDetails.getPrice();
if ("jadevip_upgrade_one".equals(sku)){
vipUpgradeOnePrice = price;
}else if ("jadevip_upgrade_two".equals(sku)){
vipUpgradeTwoPrice=price;
}
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
int responseCode = billingClient.launchBillingFlow(MainActivity.this,billingFlowParams);
}
}
}
});
}
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK
&& purchases !=null){
for (Purchase purchase:purchases){
handlePurchase(purchase);
}
}else if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.USER_CANCELED){
// Handle an error caused by a user cancelling the purchase flow.
}else {
// Handle any other error codes.
}
}
BillingClient client=BillingClient.newBuilder(MainActivity.this).setListener(this).build();
AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = new AcknowledgePurchaseResponseListener() {
@Override
public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
Toast.makeText(MainActivity.this, "Purchase acknowledged", Toast.LENGTH_SHORT).show();
}
};
void handlePurchase(Purchase purchase) {
if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
// Grant entitlement to the user.
// Acknowledge the purchase if it hasn't already been acknowledged.
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
client.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
}
}
}
}'''
这是我得到错误的地方。它表示错误描述中存在类型错误,并且responseCode不能为int类型。当我在BillingResult类型中编写reponseCod时没有出现任何错误,但这一次它不起作用。
int responseCode = billingClient.launchBillingFlow(MainActivity.this,billingFlowParams);
如果有人知道如何解决该错误,我将非常感谢。
最后,由于我的目标是准备一个只有订阅者才能看到的Activity,我是否需要将这些代码写入按钮的setOnClickListener方法中以切换到Activity?还是只写一部分就够了?
[billingClient.launchBillingFlow()
返回BillingResult
:
BillingResult responseCode = billingClient.launchBillingFlow(MainActivity.this,billingFlowParams);
这里的API参考:https://developer.android.com/reference/com/android/billingclient/api/BillingClient