使用Android BillingLibrary 4能否查询用户应用购买时间及安装来源
Android BillingLibrary 4 相关问题解答
获取用户购买应用的具体时间
分两种场景处理:
- 针对应用内购买的商品/订阅:直接通过BillingLibrary 4 API即可获取。调用
queryPurchasesAsync()查询对应产品类型的购买记录后,从返回的Purchase实例调用getPurchaseTime()即可拿到毫秒级的购买时间戳,参考代码如下:
// 查询一次性内购商品的购买记录 val queryParams = QueryPurchasesParams.newBuilder() .setProductType(BillingClient.ProductType.INAPP) .build() billingClient.queryPurchasesAsync(queryParams) { result, purchases -> if (result.responseCode == BillingClient.BillingResponseCode.OK && purchases.isNotEmpty()) { val purchaseTimestamp = purchases[0].purchaseTime // 后续业务处理 } }
- 针对用户付费购买应用本身的时间:BillingLibrary 4没有提供客户端直接查询的接口。客户端本地仅能通过
PackageManager.getPackageInfo()获取firstInstallTime(应用首次安装时间),该值和购买时间通常一致,但重装应用不会变更,不能完全等价于购买时间。如果需要精准的应用购买时间,需要服务端调用Google Play Developer API的相关接口查询,无法直接在应用内实现。
判断应用的安装获取途径
可以通过BillingLibrary返回的Purchase参数区分正规购买场景的获取来源:
- 普通付费购买:
Purchase.getPurchaseType()返回默认值0 - 促销码兑换购买:
Purchase.getPurchaseType()返回常量PURCHASE_TYPE_PROMO - 测试环境购买:
Purchase.getPurchaseType()返回常量PURCHASE_TYPE_TEST
如果需要判断是否为免费非正规渠道获取:如果你的应用本身是付费上架的,可通过查询是否存在对应的正规购买记录来判定;如果你的应用是免费下载、内购付费的模式,BillingLibrary无法直接区分应用的下载渠道,可结合安装来源校验逻辑辅助判断,无法做到100%覆盖所有场景。
内容的提问来源于stack exchange,提问作者Jake Wade
相关产品推荐
相关产品推荐

