更新记录
0.1.1(2026-11-07)
- 优化说明文档,补齐“作者系列 UTS 插件”清单及插件市场链接,便于按能力查找。
0.1.0(2026-11-06)
- 新增 Google Play Billing 9.1.0 官方依赖、Android API23+ 原生桥接和公共 UTS 合同。
- 新增商品/报价查询、一次性购买、订阅换档、当前购买查询及分组恢复。
- 新增显式确认/消耗、连接与购买事件、能力检测、订阅消息和管理入口。
- 新增有界脱敏诊断及 uni-app Vue2/Vue3、uni-app x 同源示例,支持完整报告、固定快照分段和复制失败回退。
- 新增服务端核验、幂等发货和真实 Play 验收边界说明;候选源码不表示已上架或真实交易已验收。
- 修复 Android 开发编译中公共运行时缺少显式 UTSAndroid 导入导致的 JSON/typeof 未解析及后续类型错误,保留原有接口、解析校验和回调合同。
- 修复 Android 云打包依赖图读取旧版
play-services-places-placereport元数据失败:通过 Gradle 依赖对象排除插件未使用的定位传递链,保留 Billing 9.1.0 及其余官方依赖。 - 修复 iOS 不支持平台入口的日志表达式和终态闭包类型推断错误,继续返回明确不支持错误。
- 修复 iOS 不支持入口的诊断日期及数值、布尔日志转换,不改变真实不支持错误。
平台兼容性
uni-app(5.33)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | × | × | - | × | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.33)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | √ | √ | √ | × |
lizhao-play-billing · Google Play 内购与订阅
介绍
面向 uni-app Vue2/Vue3 和 uni-app x 的 Android Google Play Billing UTS 插件,使用 Google 官方 Billing Library 9.1.0,提供商品查询、购买、订阅换档、恢复购买及显式确认/消耗。
当前为候选源码。客户端取得购买凭据后仍须可信后端验单和幂等发货。资源编译、本地行为测试与原生编译均不能替代 Play 测试账号下的实际交易验收;不宣称已在插件市场上架。
功能特色
queryProducts返回全部可见报价和价格阶段,以及未取回商品的原因;金额微单位用十进制字符串保留精度。launchPurchase在拉起前重新查询商品并检查原选报价,避免缓存过期后悄悄选择另一价格。成功只表示 SDK 接受拉起。onPurchasesUpdated独立传递购买状态;PENDING 转 PURCHASED 不会因 token 相同被丢弃。restorePurchases同时查询一次性商品和订阅,保留每组结果及错误,单边失败明确返回部分结果。acknowledgePurchase、consumePurchase均由业务显式调用;插件不自动发货、不自动确认或消耗。- 连接合并、代际隔离、超时结果未知和前台恢复查询减少重复交易风险;监听可按 ID 释放。
- 双宿主示例含完整环境报告、原生诊断、脱敏日志、一键复制、固定快照分段及手动复制回退。
适合哪些场景
| 场景 | 使用方式 | 边界 |
|---|---|---|
| 金币、次数等消耗型商品 | 查询、购买、后端核验发货后消耗 | 消耗后不再依赖当前购买列表恢复历史订单 |
| 永久去广告、买断功能 | 后端核验发货后确认 | 不得消耗非消耗型购买 |
| 月度/年度会员 | 查询 subs、选择 Base plan/Offer 后购买 | 到期、退款和权益状态由后端维护 |
| 会员升级、降级或换计划 | 传旧 token、旧商品和语义替换模式 | 每次一个商品条目;不支持 add-ons/KEEP_EXISTING |
| 掉单核对、换设备恢复 | 应用前台自动查询或手动恢复 | 返回当前购买,不是全部历史订单 |
下载与导入
保留完整 uni_modules/lizhao-play-billing/ 目录,通过源码方式导入项目。业务仅从 @/uni_modules/lizhao-play-billing 根目录导入 API;不要导入内部平台文件。
| 宿主 | 完整示例页面 | 注册路径(去掉扩展名) |
|---|---|---|
| uni-app x | uni_modules/lizhao-play-billing/example/uniappx/index.uvue |
uni_modules/lizhao-play-billing/example/uniappx/index |
| uni-app Vue2/Vue3 | uni_modules/lizhao-play-billing/example/uniapp/index.vue |
uni_modules/lizhao-play-billing/example/uniapp/index |
在宿主 pages.json 注册对应页面。选择当前宿主示例,不把 uvue 页面直接注册到传统 uni-app。源码基于 HBuilderX 5.33 系列验证;Android 最低 API 23。导入包含新的原生 UTS/Kotlin 和 Maven 依赖,必须重新原生联编或制作 Android 自定义基座;标准基座及旧基座不能凭 WGT 获得新增 SDK。
原生配置位于 uni_modules/lizhao-play-billing/utssdk/app-android/config.json。配置通过 HBuilderX 支持的 Gradle 源码对象固定使用 com.android.billingclient:billing:9.1.0,并排除该版本 POM 带入的 com.google.android.gms:play-services-location 旧传递链;插件本身不调用定位 API。这样可避免继续解析 play-services-places-placereport:17.0.0,同时保留 Billing API 及其余官方依赖。插件不附带 AAR/JAR,不需要把 SDK 手工复制进项目。
从基础到进阶:按业务模块使用
模块一:连接和事件生命周期
先在 Google Play Console 准备应用、真实商品及测试账号,Android 包名须与对应应用一致。uni-app x 页面可直接使用以下最小连接示例;它不会发起购买或发货:
<template>
<view>
<button @click="connect">连接 Play</button>
<text>{{ status }}</text>
</view>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import { connectBilling, onPurchasesUpdated, offPurchasesUpdated, BillingEvent } from '@/uni_modules/lizhao-play-billing'
const status = ref('尚未连接')
const listenerId = onPurchasesUpdated((event: BillingEvent) => {
status.value = '购买事件:' + event.purchases.length + ' 条,须按状态核验'
// 将purchased购买的token通过业务HTTPS通道交可信后端;不要输出token。
})
function connect() {
connectBilling({
success: () => { status.value = '已连接,可查询商品' },
fail: (error) => { status.value = error.errCode + ' · ' + error.errMsg },
complete: (result) => { console.log('连接完成:' + result.requestId + ',ok=' + result.ok) }
})
}
onUnload(() => { offPurchasesUpdated(listenerId) })
</script>
传统 uni-app Vue2/Vue3 使用选项式生命周期,最小示例为:
<template><view><button @click="connect">连接 Play</button><text>{{ status }}</text></view></template>
<script>
import { connectBilling, onPurchasesUpdated, offPurchasesUpdated } from '@/uni_modules/lizhao-play-billing'
export default {
data() { return { status: '尚未连接', listenerId: '' } },
onLoad() {
this.listenerId = onPurchasesUpdated(event => {
this.status = '购买事件:' + event.purchases.length + ' 条,须按状态核验'
})
},
onUnload() { offPurchasesUpdated(this.listenerId) },
methods: {
connect() {
connectBilling({
success: () => { this.status = '已连接' },
fail: error => { this.status = error.errCode + ' · ' + error.errMsg },
complete: result => { console.log('连接完成:' + result.requestId + ',ok=' + result.ok) }
})
}
}
}
</script>
完整可交互页面见 uni_modules/lizhao-play-billing/example/uniappx/index.uvue 和 uni_modules/lizhao-play-billing/example/uniapp/index.vue。页面卸载移除自己的监听;只有应用级连接拥有者才调用 disconnectBilling,避免影响其它页面。
模块二:查询商品并购买用户选择的报价
以下 UTS 函数接受业务配置的真实商品 ID,以及查询返回、由用户明确选择的商品/报价。先展示 pricingPhases 中的币种、价格、周期和续期含义,再让用户确认。传统 JS 使用相同代码时去掉类型注解及类型 import 即可;完整 JS 页面已随插件提供。
import { queryProducts, launchPurchase, BillingProduct, BillingOffer } from '@/uni_modules/lizhao-play-billing'
export function loadProducts(productType: string, ids: string[], show: (products: BillingProduct[]) => void) {
queryProducts({ productType: productType, productIds: ids,
success: (result) => {
show(result.products)
console.log('商品数=' + result.products.length + ',未取回=' + result.unfetchedProducts.length)
},
fail: (error) => { console.error(error.errCode + ' · ' + error.errMsg) }
})
}
export function buySelected(product: BillingProduct, offer: BillingOffer) {
launchPurchase({ productType: product.productType, productId: product.productId, offerToken: offer.offerToken,
success: (result) => { console.log('结算请求状态=' + result.status + ';等待独立购买事件') },
fail: (error) => { console.error(error.errCode + ' · ' + error.errMsg) }
})
}
不长期缓存 ProductDetails。若原报价失效,插件返回商品/报价错误,业务应刷新并重新让用户选择;不会自动换收费方案。试用也是报价的一部分,不能仅看第一阶段价格就声称永久免费。
模块三:恢复、核验与确认/消耗
import { restorePurchases, acknowledgePurchase, consumePurchase, BillingPurchase } from '@/uni_modules/lizhao-play-billing'
export function restoreCurrentPurchases(handle: (purchases: BillingPurchase[]) => void) {
restorePurchases({
success: (result) => {
handle(result.purchases)
for (const group of result.groups) {
if (!group.ok && group.error != null) console.error(group.productType + ':' + group.error!.errCode)
}
console.log('部分结果=' + result.partial)
},
fail: (error) => { console.error(error.errCode + ' · ' + error.errMsg) }
})
}
// 仅供已经完成可信后端核验和幂等发货的业务流程调用;函数本身不执行验单。
export function finalizeDeliveredPurchase(purchase: BillingPurchase, consumable: boolean) {
if (purchase.purchaseState != 'purchased' || purchase.isSuspended) return
if (consumable) {
consumePurchase({ purchaseToken: purchase.purchaseToken,
success: () => { console.log('消耗完成') },
fail: (error) => { console.error(error.errCode + ' · outcomeUnknown=' + error.outcomeUnknown) }
})
} else if (!purchase.acknowledged) {
acknowledgePurchase({ purchaseToken: purchase.purchaseToken,
success: () => { console.log('确认完成') },
fail: (error) => { console.error(error.errCode + ' · outcomeUnknown=' + error.outcomeUnknown) }
})
}
}
后端从已认证业务会话确定用户,核对配置包名、商品、Google 返回的购买状态及绑定标识;以购买 token 建唯一幂等记录,再按购买数量与权益合同入账。客户端传来的商品和“已验证”标记不能作为发货依据。Google 推荐把验单及敏感发货逻辑置于可信后端。购买安全建议
一次性商品可使用 purchases.productsv2.getproductpurchasev2,订阅使用 purchases.subscriptionsv2.get。两者由后端持有 Google 凭据访问;不把服务账号或 OAuth access token 放客户端。订阅结合 RTDN 和 Developer API 处理续费、取消、退款、到期和换档关联;autoRenewing=false 不等于权益已到期。
客户端确认/消耗超时可能已在 Google 执行,错误 outcomeUnknown=true 时先核对后端和当前购买状态,不重复发货。恢复不返回已经消耗的完整历史,历史权益从业务后端恢复。
模块四:订阅换档与辅助能力
import { launchPurchase, BillingProduct, BillingOffer, BillingPurchase } from '@/uni_modules/lizhao-play-billing'
export function replaceSubscription(product: BillingProduct, offer: BillingOffer, old: BillingPurchase, oldProductId: string) {
launchPurchase({ productType: 'subs', productId: product.productId, offerToken: offer.offerToken,
oldPurchaseToken: old.purchaseToken, oldProductId: oldProductId, replacementMode: 'deferred',
success: () => { console.log('换档请求已受理;等待购买更新及服务端状态核对') },
fail: (error) => { console.error(error.errCode + ' · ' + error.errMsg) }
})
}
replacementMode 使用语义字符串,插件映射 Billing 9 的商品级常量;不要传旧 SDK 数字。实际支持模式还受旧计划、新计划、预付/自动续期规则和 Google 校验约束。openSubscriptionManagement 只是打开官方管理页面,不代表用户取消成功;showInAppMessages 的结果码不是“已显示广告”或已恢复权益。
API 用途速查
方法
| API | 用途 | 返回值 |
|---|---|---|
| connectBilling | 连接并合并同配置的并发请求 | 请求 ID string |
| disconnectBilling | 幂等断开,释放本代请求及原生生命周期资源 | 请求 ID string |
| getBillingStateSync | 读取当前连接与购买流程快照 | BillingState |
| getBillingCapabilities | 检测 SDK 实际能力及响应码 | 请求 ID string |
| queryProducts | 查询商品及所有可见报价 | 请求 ID string |
| launchPurchase | 刷新报价后拉起一次购买或订阅换档 | 请求 ID string |
| queryPurchases | 查询指定类型的当前购买 | 请求 ID string |
| restorePurchases | 合并 inapp/subs 当前购买及分组错误 | 请求 ID string |
| acknowledgePurchase | 显式确认购买 | 请求 ID string |
| consumePurchase | 显式消耗购买 | 请求 ID string |
| onPurchasesUpdated | 监听购买更新和自动恢复事件 | 监听 ID string |
| offPurchasesUpdated | 移除指定购买监听 | void |
| onBillingStateChange | 监听连接、恢复和流程状态变化 | 监听 ID string |
| offBillingStateChange | 移除指定状态监听 | void |
| getBillingConfig | 查询 Google 提供的结算国家 | 请求 ID string |
| showInAppMessages | 请求订阅相关应用内消息 | 请求 ID string |
| openSubscriptionManagement | 打开 Google 订阅管理页 | 请求 ID string |
| setDiagnosticsEnabled | 控制详细原生诊断,基础错误仍保留 | void |
| getDiagnosticsSync | 获取脱敏公共日志与原生快照 | BillingDiagnostics |
| clearDiagnostics | 显式清理插件诊断,不清页面报告或业务订单 | void |
除同步接口、监听注册/移除和诊断开关外,参数均为 options 对象,至少传 {}。完整强类型定义见 uni_modules/lizhao-play-billing/utssdk/interface.uts。
公共回调与时限
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| success | (BillingResult) => void | 否 | 一次性成功;购买拉起仅表示受理 | 不回调 | 函数 |
| fail | (BillingFail) => void | 否 | 与 success 互斥;保留原码及未知结果语义 | 不回调 | 函数 |
| complete | (BillingCompleteResult) => void | 否 | success/fail 后一次;不重复携带凭据 | 不回调 | 函数 |
| timeoutMs | number | 否 | 连接/商品/购买准备/查询/恢复/确认/消耗的整数毫秒时限 | 连接 20000;其它 15000 | 1000–120000 |
getBillingCapabilities/getBillingConfig/showInAppMessages 使用内部 15000ms 请求时限。launchPurchase 的时限只覆盖准备阶段,受理后没有“15秒内必须付款”的计时器。结果由独立购买事件取得。回调在公开函数返回请求 ID 后异步派发;客户回调异常不阻断 complete。
连接、查询和恢复参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| enableAutoServiceReconnection | boolean | 否 | connectBilling:SDK 自动服务重连 | true | true/false |
| enablePrepaidPlans | boolean | 否 | connectBilling:开启预付计划 pending 支持 | false | true/false |
| productType | string | queryProducts/queryPurchases 是 | 商品类型 | 无 | inapp/subs |
| productIds | string[] | queryProducts 是 | 1–50 个非空且不重复的商品 ID;单个不超过 256 字符 | 无 | Play Console 商品 |
| includeSuspendedSubscriptions | boolean | 否 | queryPurchases/restorePurchases:订阅查询包含暂停项 | false | true/false |
已有连接的配置不能静默更改;选项冲突返回错误,需显式断开后重连。getBillingStateSync 的 ready 是当时快照,不能保证下一次 SDK 调用成功。
购买及替换参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| productType | string | 是 | 目标商品类型 | 无 | inapp/subs |
| productId | string | 是 | 目标真实商品 ID | 无 | 最长 256 字符 |
| offerToken | string | 订阅/有 token 的报价是 | 来自用户所选 BillingOffer;不打印 | 无 | SDK 返回值 |
| obfuscatedAccountId | string | 否 | 后端派生的不可逆业务账号标识,不传邮箱等明文 | 无 | 最长 64 字符 |
| obfuscatedProfileId | string | 否 | 后端派生的不可逆业务档案标识 | 无 | 最长 64 字符 |
| isOfferPersonalized | boolean | 否 | 是否个性化定价,按业务实际选择 | false | true/false |
| oldPurchaseToken | string | 换档是 | 旧订阅 token;不写日志 | 无 | 真实旧购买凭据 |
| oldProductId | string | 换档是 | 旧购买中被替换的商品 | 无 | 真实旧订阅商品 |
| replacementMode | string | 换档是 | 语义映射,不接收 SDK 数字 | 无 | withTimeProration/chargeProratedPrice/withoutProration/chargeFullPrice/deferred |
换档三个旧参数必须一起提供,且仅适用 subs。KEEP_EXISTING、多商品、add-ons、替代结算和外部支付不在此版本合同内。同时只允许一个购买流程,未知结果时先恢复核对,不靠超时擅自重买。
其它参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| purchaseToken | string | acknowledgePurchase/consumePurchase 是 | 真实购买凭据,仅经业务通道传递 | 无 | 非空,最长 4096 字符 |
| productId | string | openSubscriptionManagement 否 | 指定订阅商品;省略打开管理列表 | 无 | 真实订阅商品 |
| listener | (BillingEvent) => void | onXxx 是 | 持续监听回调 | 无 | 函数 |
| listenerId | string | offXxx 是 | 对应 onXxx 返回的 ID | 无 | 真实监听 ID |
| enabled | boolean | setDiagnosticsEnabled 是 | 开关详细诊断 | false | true/false |
结果与事件
BillingResult 含 operation、requestId、elapsedMs、status、billingResponseCode、subResponseCode、debugMessage、state、partial,以及 products、unfetchedProducts、purchases、groups、capabilities、countryCode、messageResponseCode。不适用数组为空。原生和 uni-app x 的可空字段为 null;传统 uni-app 的原生到 JS 序列化可能省略 null 属性,接口因此将这些属性声明为可选,统一使用 value ?? null 读取。缺省/null 均表示不可得,不能推断成付款成功。
| 数据 | 关键字段及含义 |
|---|---|
| BillingProduct | productId/productType/title/name/productDescription/offers |
| BillingOffer | offerToken、offerId、basePlanId、purchaseOptionId、offerTags、pricingPhases;缺失标识为 null |
| BillingPricePhase | formattedPrice、priceAmountMicros(精确字符串)、priceCurrencyCode、billingPeriod、billingCycleCount、recurrenceMode |
| BillingPurchase | productIds、purchaseToken、可空 orderId、packageName、purchaseState、acknowledged、autoRenewing、quantity、purchaseTime(毫秒字符串)、isSuspended |
| BillingPurchaseGroup | productType、ok、purchases、可空 error;恢复单边失败时 success.partial=true,两边失败走 fail |
| BillingState | connection、ready、generation、purchaseFlow、activeRequests、pendingRecovery;未知状态为 unknown |
| BillingEvent | eventId、type、source、可空 requestId、SDK 码、购买列表、groups、state、可空 error |
| BillingCompleteResult | operation、requestId、ok、errCode、errMsg;不含购买凭据 |
| BillingDiagnostics | 插件/SDK/源码构建标记、时间、公共日志、丢弃数量、原生快照 |
purchaseState 为 purchased/pending/unspecified。pending 不发货;purchased 仍需后端验证。购买事件无法证明对应某次请求时 requestId=null,不强行关联最近一次购买。SDK 可能重复回传同一购买,后端必须幂等;插件不会永久按 token 去重。
capabilities.feature 保留 SDK 原始特征字符串:subscriptions 为订阅、subscriptionsUpdate 为订阅替换、fff 为商品详情、bbb 为应用内消息、ggg 为结算配置、nnn 为包含暂停订阅。supported=false 时同时查看 billingResponseCode/debugMessage,不能将服务错误直接视为设备永远不支持。
错误码说明
errSubject 固定为 lizhao-play-billing。BillingFail 除标准 errCode/errMsg 外,还包括 operation、requestId、billingResponseCode、subResponseCode、debugMessage、retryable、outcomeUnknown、elapsedMs、nativeType、nativeCause、nativeStack。原始异常与 SDK 消息在桥接前脱敏;不可得原码为 null,未知原生信息有明确说明。
| 错误码 | 含义 | 处理建议 |
|---|---|---|
| 9363001 | 当前平台不支持 | 在 Android 匹配基座调用 |
| 9363002 | 参数或连接配置无效 | 检查类型、范围、商品/换档参数及已有连接 |
| 9363003 | 尚未连接 | 先连接或检查服务状态 |
| 9363004 | 连接失败 | 查看 Billing 原码、Play 环境及网络 |
| 9363005 | 缺少可用宿主/Activity | 返回可交互前台,使用匹配宿主 |
| 9363006 | 当前 SDK/商店不支持所需能力 | 读取能力和原码,明确提示用户 |
| 9363007 | 商品/报价不存在或失效 | 刷新并让用户重选报价 |
| 9363008 | 购买流程忙碌 | 等购买事件,必要时恢复核对 |
| 9363009 | 用户取消 | 不发货,不把已受理拉起再次回调为失败 |
| 9363010 | Google Billing 请求失败 | 按原码区分服务/商品/开发者错误;不要一律重试 |
| 9363011 | 超时,部分操作结果未知 | 查看 outcomeUnknown;先查询后端/恢复再决定重试 |
| 9363012 | 桥接或序列化数据异常 | 复制脱敏报告,核对原生与资源构建身份 |
| 9363013 | 请求已因断开/释放结束 | 不用迟到回执改变新一代连接状态 |
| 9363014 | 原生异常 | 查看异常类型、原因及堆栈 |
| 9363015 | 两类恢复查询均失败 | 查看 recovery 事件/分组诊断并分别重试 |
retryable 仅为技术提示,不授权重新购买。用户取消通常出现在独立购买事件内;launchPurchase 先前的 launched 回调不代表订单成功。结果未知不能解释成“未扣款”。
注意事项
平台、依赖和基座
实际付款仅适用于 Android 6.0/API23 及以上。uni-app Vue2/Vue3 与 uni-app x 提供同一 API 合同;iOS、Harmony、Web、微信/支付宝小程序仅保留明确不支持入口及诊断,不支持 Google Play 购买。nvue 未验收。不因某平台可导入就声明具备支付能力。
必须使用可用的 Google Play 环境、匹配包名、已配置商品、符合资格的账号及匹配原生基座。APK 安装来源和许可测试规则以 Google 测试说明 为准;许可测试账号与普通内部测试账号不同,后者可能产生真实扣款。不要把模拟成功当作验收。
修改原生 UTS/Kotlin、SDK、Manifest 或配置后重新原生联编/重打 Android 自定义基座;WGT 不能更新已编进基座的原生代码。本插件声明 BILLING 并查询 Play Store;当前独立 APK 的真实合并依赖还包含 INTERNET、ACCESS_NETWORK_STATE 和应用自身签名级 DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION。完整宿主还可能引入其它权限,SDK 数据处理和商店数据安全声明应依据实际构建产物及应用业务填写。
生命周期、权益与隐私
前台恢复只查询购买,不自动付款。断开连接不取消 Google 订单、不撤销用户权益。订阅暂停、退款、取消与到期不应仅凭客户端某一布尔值判断。确认/消耗应由后端流程统筹,客户端与后端不要争抢同一交易终态。
purchaseToken、oldPurchaseToken、offerToken、原始购买 JSON、签名、完整订单号和账号标识不得写到 console、监控或剪贴板。示例仅在业务内存持有凭据,卸载清理页面引用;不默认保存原始凭据或上传诊断。账号混淆标识不要直接用邮箱/电话。
诊断与验收范围
示例页面底部的一键复制包含运行时白名单环境、getBillingStateSync、getDiagnosticsSync 和全部已保留操作日志。报告标注编号、UTC时间、时区、条数和正文长度,分段来自固定快照;只有实际剪贴板 success 才推进分段,失败保留同段并提供可选择文本。复制不清日志。
插件与报告采用有界日志,错误另行保留,淘汰计数可见。构建身份由本插件 package 与源码生成;它不是客户安装 APK 的 HX/基座版本。未注入或无法可靠采集的 HX、编译器、基座及设备字段明确写 unknown,运行时版本另标来源。报告辅助源码为 uni_modules/lizhao-play-billing/example/report.uts,传统宿主对应生成物为 uni_modules/lizhao-play-billing/static/report.js。
发布前还需在有 Play 测试环境的真实宿主上覆盖购买成功/取消、PENDING 后完成、断网、重启补单、订阅替换、确认/消耗、部分恢复,以及手机系统剪贴板分段与失败回退。当前文档不把本地静态/资源/原生测试描述为这些场景均已通过。
作者系列 UTS 插件
以下为作者已发布的 UTS 插件,可按能力方向查找。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-alipay-kit |
支付宝授权登录、App 支付与脱敏诊断 | 查看插件 |
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-apple-iap |
苹果内购、交易恢复、订阅管理与服务端验签参考 | 查看插件 |
lizhao-apple-login |
苹果授权登录、凭证状态与撤销监听 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-ble |
BLE 扫描、连接、读写、通知与自动重连 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-camera-pro |
原生相机、拍照录像、水印与媒体保存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-dingtalk |
钉钉授权登录、内容分享与回执诊断 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-douyin-kit |
抖音授权登录、内容分享与回执诊断 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-gallery-pro |
相册媒体分页、筛选、缩略图与导出 | 查看插件 |
lizhao-google-login |
Google 授权登录、会话管理与脱敏诊断 | 查看插件 |
lizhao-hce-card |
NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 | 查看插件 |
lizhao-health |
健康数据授权、查询、统计与写入 | 查看插件 |
lizhao-http-server |
本地 HTTP 服务、文件传输与实时通信 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-id-photo |
证件照制作、尺寸换算、换底色与模板换装 | 查看插件 |
lizhao-img-eraser |
图片去水印、局部修复与原生编辑器 | 查看插件 |
lizhao-live-activity |
实时活动、系统胶囊与普通通知降级 | 查看插件 |
lizhao-live-photo |
实况照片选取、展示预览与原件处理 | 查看插件 |
lizhao-map |
高德地图、定位、地点搜索、路线规划与导航 | 查看插件 |
lizhao-meta |
Facebook 登录分享、应用事件与深链 | 查看插件 |
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-notify-pro |
本地通知、点击动作、进度与定时提醒 | 查看插件 |
lizhao-novel-reader |
原生小说阅读、仿真翻页与段落评论 | 查看插件 |
lizhao-office-view |
Office 与 PDF 文件预览、进度与缓存管理 | 查看插件 |
lizhao-pdf-pro |
PDF 阅读、签批、真实写回与页面处理 | 查看插件 |
lizhao-play-billing |
Google Play 商品购买、订阅、恢复与确认消耗 | 查看插件 |
lizhao-qq-share |
QQ 授权码登录、QQ 与 QQ 空间分享 | 查看插件 |
lizhao-qrcode |
二维码生成、Logo 与样式配置、批量生成及导出 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-serial-port |
路径串口、USB 串口、多会话收发与诊断 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-sse-pro |
SSE、Line、JSONL 与 Raw 流式请求 | 查看插件 |
lizhao-tcp-pro |
TCP 客户端、服务端、多连接与诊断 | 查看插件 |
lizhao-usb-storage |
U 盘、移动硬盘文件浏览、读写与批量复制 | 查看插件 |
lizhao-video-editor |
视频裁剪、压缩、取帧与 FFmpeg/FFprobe | 查看插件 |
lizhao-video-feed |
短视频上下滑、短剧选集与分页加载 | 查看插件 |
lizhao-video-player |
原生视频播放器、清晰度与播放交互 | 查看插件 |
lizhao-video-thumb |
视频封面、批量取帧与 Base64 返回 | 查看插件 |
lizhao-vpn-pro |
企业 VPN、IKEv2、安全接入与脱敏诊断 | 查看插件 |
lizhao-wechat-kit |
微信登录、分享、支付、小程序与客服 | 查看插件 |
lizhao-wecom |
企业微信授权登录、内容分享与脱敏诊断 | 查看插件 |
lizhao-xhs-share |
小红书图文视频分享与回执诊断 | 查看插件 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6486
赞赏 5
下载 12749114
赞赏 1959
赞赏
京公网安备:11010802035340号