如何在Android应用中通过Anjlab库的getPurchaseHistory()获取内购购买记录
Anjlab内购库getPurchaseHistory方法使用指导
前置调用要求
- 需确保BillingProcessor已完成初始化,在
BillingProcessor.IBillingHandler的onBillingInitialized回调触发后再调用该方法,未初始化完成调用会返回空值或报错 - 测试设备需登录正常可用的Google账号,且应用已获得结算相关权限
参数说明
getPurchaseHistory方法接收两个参数:
- 第一个参数
type:查询的商品类型,内购普通商品填BillingProcessor.SKU_TYPE_INAPP,订阅商品填BillingProcessor.SKU_TYPE_SUBS - 第二个参数
extraParams:无特殊查询需求时直接传null即可
完整使用示例
// 必须在子线程调用,该方法为耗时操作,主线程调用会引发ANR new Thread(() -> { // 示例为查询普通内购商品历史,如需查订阅替换type参数即可 List<BillingHistoryRecord> historyList = bps.getPurchaseHistory(BillingProcessor.SKU_TYPE_INAPP, null); if (historyList == null || historyList.isEmpty()) { Log.i("PurchaseHistory", "无对应购买历史记录"); return; } // 遍历输出所有字段 for (BillingHistoryRecord record : historyList) { Log.i("PurchaseHistory", "--------------------------"); Log.i("PurchaseHistory", "交易token:" + record.purchaseToken); Log.i("PurchaseHistory", "订单ID:" + record.orderId); Log.i("PurchaseHistory", "商品SKU:" + record.sku); Log.i("PurchaseHistory", "购买时间:" + record.purchaseTime); Log.i("PurchaseHistory", "购买状态:" + record.purchaseState); Log.i("PurchaseHistory", "开发者自定义 payload:" + record.developerPayload); } }).start();
注意事项
- 该方法为跨进程调用Google Play结算服务的耗时操作,必须放在子线程执行
- 仅能返回当前设备登录的Google账号对应的购买历史,已退款、已取消的订单不会被查询到
- 如查询无结果,优先检查
type参数是否和你要查询的商品类型匹配,再确认当前登录的账号确实存在对应内购记录
内容的提问来源于stack exchange,提问作者user7191985
相关产品推荐
相关产品推荐

