用途:在实现 Play Billing 客户端完整购买序列时使用,从“购买”点击启动一次性商品或订阅的购买,处理回调和响应码,然后校验、确认并发放权益。不涵盖连接 BillingClient、查询 ProductDetails、订阅升降级及更广的重试与错误分类。
主要能力与步骤: 前置检查:确认 BillingClient.isReady、ProductDetails 已缓存、已启用 pending purchases、已知现有所有权、订阅已解析 offerToken。 规划:设置 obfuscatedAccountId(内部用户 ID 的单向哈希,勿传明文邮箱);仅在自动化个性化定价时设 setIsOfferPersonalized(true);订阅按 basePlanId 分组选择合适 offerToken;决定在服务端还是客户端完成确认与发放,服务端优先。 执行:为一次性商品构建 ProductDetailsParams 并加入 BillingFlowParams;订阅需 setOfferToken。调用 billingClient.launchBillingFlow(activity, flowParams),需传当前 Activity。OK 仅表示对话框已显示,真实结果在 PurchasesUpdatedListener。处理 ITEM_ALREADY_OWNED、DEVELOPER_ERROR、FEATURE_NOT_SUPPORTED、BILLING_UNAVAILABLE、ITEM_UNAVAILABLE、NETWORK_ERROR 等启动响应码。 成功购买五步:服务端校验 purchaseToken;检查 purchaseState(PURCHASED 才发放,PENDING 显示等待 UI);以 purchaseToken 为唯一键幂等发放权益;3 天内确认或消费(非消耗品与订阅用 acknowledgePurchase,消耗品用 consumeAsync),服务端确认优先;向用户展示具体确认信息并返回原内容。 待处理交易:PENDING 时显示等待信息,不发放权益,后续通过监听器、RTDN 或 queryPurchasesAsync 获知状态变化。 查询时机:连接成功后、应用启动、前台恢复时调用 queryPurchasesAsync。 多商品:PBL 7.0+ 可在一个交易中打包多个同类型条目,一个 purchaseToken 覆盖整包,确认一次后遍历 purchase.products 发放权益。
验证要点:内部测试轨道上 launchBillingFlow() 返回 OK;成功时监听器返回 OK 且 purchases 非空,取消时返回 USER_CANCELED;每个响应码分支均有代码路径与日志;服务端校验在发放前执行且幂等;3 天内确认或消费;延迟支付方式能出现待处理状态且不发放权益;订阅缺 offerToken 返回 DEVELOPER_ERROR。限制:需活动 Activity 与已连接 BillingClient,无法离线完成,具体价格、平台支持等细节资料未提供。