更新记录
1.0(2023-03-22)
本插件封装了Google结算库中的方法,并提供了特色功能一键拉起支付,仅需调用一个方法,降低了使用复杂度。
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:8.1 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
Google结算库(订阅/内购)-一键拉起支付-集成插件使用说明
请注意,在使用本插件前请一定要在Google Play Console中完成相应配置。 如果您不清楚如何配置,可以参考以下链接中的内容。
官方文档 https://developer.android.com/google/play/billing/getting-ready?hl=zh-cn 其他文档 https://juejin.cn/post/6844903902941282318 https://www.jianshu.com/p/f6b01d108981 https://blog.csdn.net/yangbin0513/article/details/123591922
如果您以完成相应的配置,可以参照以下说明使用本插件。
首先您需要引用本插件
var googlePlayBillingNative = uni.requireNativePlugin('cloudbyte-googleplaybilling-native')
特色功能 一键拉起支付
对于只需要处理简单购买商品需求的用户,我们提供了一键拉起支付功能。 一键拉起支付功能只需要调用一个方法,您只需将商品类型(productType)、商品id(productId)传入即可拉起支付。
方法名:quickLaunchBillingFlow 参数1:productType(商品类型,该参数只有两个选项INAPP或SUBS,INAPP为内购,SUBS为订阅) 参数2:productId(商品id,您在Google Play Console中配置的商品id)
实例代码
var productType='INAPP';
var productId='test001';
googlePlayBillingNative.quickLaunchBillingFlow({
productType:productType,
productId:productId
},
rep=>{
if(rep.result=='success'){
//支付成功
//rep.data.purchases为支付返回的数组数据
console.log(rep.data.purchases);
//如果您要获取第一笔中的purchaseToken的话
//purchaseToken非常重要
console.log(rep.data.purchases[0].purchaseToken);
}else{
//支付失败
//rep.source为报错来源,exception为代码层报错,billclient为google报错
console.log(rep.source);
//rep.message为错误详情
console.log(rep.message);
}
});
上面的示例是查询一个商品的使用情况,但是如果要同时查询多个商品怎么办?您可以按照以下的代码同时查询多个商品。
var productList=[{
productType:"INAPP",
productId:"test001"
},
{
productType:"INAPP",
productId:"test002"
},
{
productType:"INAPP",
productId:"test003"
}];
googlePlayBillingNative.quickLaunchBillingFlow({
productList:productList
},
rep=>{
if(rep.result=='success'){
//支付成功
//rep.data.purchases为支付返回的数组数据
console.log(rep.data.purchases);
//如果您要获取第一笔中的purchaseToken的话
//purchaseToken非常重要
console.log(rep.data.purchases[0].purchaseToken);
}else{
//支付失败
//rep.source为报错来源,exception为代码层报错,billclient为google报错
console.log(rep.source);
//rep.message为错误详情
console.log(rep.message);
}
});
实际上就是把参数换成了一个商品信息的数组,进行传入调用。
上述是一键拉起功能方法的介绍,适用于商品不复杂的场景中。有些情况下,您可能需要把握处理支付过程中的每一处细节,那这种情况下您也可以灵活调用Google结算库中对应的方法。
调用Google结算库中对应的方法
每个方法的详细介绍,请参照官方文档。
https://developer.android.com/google/play/billing/integrate?hl=zh-cn
createBillingClient(初始化 BillingClient)
googlePlayBillingNative.createBillingClient({},rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
startConnection(连接到 Google Play)
googlePlayBillingNative.startConnection({},rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
endConnection(断开与 Google Play的连接)
googlePlayBillingNative.endConnection({},rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
isReady(是否已经连接到Google Play)
googlePlayBillingNative.isReady({},rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
queryProductDetails(展示可供购买的商品)
googlePlayBillingNative.queryProductDetails({
productType:'INAPP',
productId:'test001',
//或
productList:[{
productType:'INAPP',
productId:'test001'
},{
productType:'INAPP',
productId:'test002'
},{
productType:'INAPP',
productId:'test003'
}]
},
rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
launchBillingFlow(启动购买流程)
//queryProductDetails结果中第几个商品的序号
var productDetailsIndex=0;
//促销代码非必填
var offerToken="";
googlePlayBillingNative.launchBillingFlow({
productDetailsIndex:productDetailsIndex,
offerToken:offerToken//促销代码非必填
},
rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
launchBillingFlowDefault(启动购买流程)
默认购买queryProductDetails结果中的第一个商品且无促销代码
googlePlayBillingNative.launchBillingFlowDefault({
},
rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
consume(购买交易确认-消耗型商品)
//purchase为launchBillingFlow购买成功后rep.data.purchases数组中的某一项
var purchase={};
googlePlayBillingNative.consume(purchase,
rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
acknowledgePurchase(购买交易确认-非消耗型商品)
//purchase为launchBillingFlow购买成功后rep.data.purchases数组中的某一项
var purchase={};
googlePlayBillingNative.acknowledgePurchase(purchase,
rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
queryPurchases(提取购买交易)
googlePlayBillingNative.queryPurchases({
productType:'INAPP'
},
rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});
queryPurchaseHistory(提取交易记录)
该方法返回用户针对每个商品发起的最近一笔购买记录,即使该购买交易已过期、已取消或已消耗,也仍会提取相关记录。
googlePlayBillingNative.queryPurchaseHistory({
productType:'INAPP'
},
rep=>{
if(rep.result=='success'){
//成功
console.log(rep.data)
}else{
//失败
console.log(rep.message);
}
});