📅  最后修改于: 2023-12-03 14:52:12.840000             🧑  作者: Mango
应用内购买(In-App Purchase, IAP)是指用户可以通过应用程序内部购买虚拟商品、订阅服务或解锁功能的功能。在 Android 开发中,可以通过使用 Google Play Billing Library 来实现应用内购买功能。
以下是在 Android 中实现应用内购买的步骤:
In-app products
(应用内商品)部分,创建你的虚拟商品或订阅项目,设置价格、描述等信息。在项目的 build.gradle 文件中添加以下依赖:
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.android.billingclient:billing:4.0.0'
在 AndroidManifest.xml 文件中添加以下权限:
<uses-permission android:name="com.android.vending.BILLING" />
在应用启动时,创建并初始化 BillingClient 对象,连接 Google Play 商店。可以在 Application 类的 onCreate
方法中进行初始化:
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.PurchasesUpdatedListener;
public class MyApp extends Application {
private BillingClient billingClient;
@Override
public void onCreate() {
super.onCreate();
billingClient = BillingClient.newBuilder(this)
.setListener(new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
// 处理购买结果
}
})
.enablePendingPurchases()
.build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
// 连接成功
}
@Override
public void onBillingServiceDisconnected() {
// 连接断开
}
});
}
}
在需要展示可购买商品列表的界面,使用 BillingClient 查询可购买商品的信息:
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.SkuDetails;
import com.android.billingclient.api.SkuDetailsParams;
import com.android.billingclient.api.SkuDetailsResponseListener;
billingClient.querySkuDetailsAsync(SkuDetailsParams.newBuilder()
.setType(BillingClient.SkuType.INAPP) // 查询应用内商品
.setSkusList(Arrays.asList("productId1", "productId2")) // 商品 ID 列表
.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
// 处理商品信息列表
}
});
当用户点击购买按钮时,启动购买流程:
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.ConsumeParams;
import com.android.billingclient.api.ConsumeResponseListener;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchaseParams;
import com.android.billingclient.api.PurchaseResult;
import com.android.billingclient.api.PurchasesUpdatedListener;
// 发起购买
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails) // 商品信息
.build();
billingClient.launchBillingFlow(activity, flowParams);
// 处理购买结果(已在初始化 BillingClient 时设置了 Listener)
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null) {
for (Purchase purchase : purchases) {
// 处理购买成功的商品
// 如果是订阅商品,记得调用 acknowledgePurchase 或 consumeAsync 方法
}
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
// 用户取消购买
} else {
// 购买失败
}
}
对于应用内非消耗性商品,需要调用 BillingClient.acknowledgePurchase
或 BillingClient.consumeAsync
方法来消耗购买项。
// 消耗商品
ConsumeParams consumeParams = ConsumeParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
billingClient.consumeAsync(consumeParams, new ConsumeResponseListener() {
@Override
public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
// 消耗成功
}
});
// 对于订阅商品,调用 acknowledgePurchase 方法
billingClient.acknowledgePurchase(AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build(), new AcknowledgePurchaseResponseListener() {
@Override
public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
// 完成订阅确认
}
});
以上是在 Android 中实现应用内购买的基本步骤和代码示例。根据具体情况,你可以根据返回的 BillingResult
对象来处理购买结果,并进行相应的业务逻辑处理。