更新记录

1.0(2023-03-22)

本插件封装了Google结算库中的方法,并提供了特色功能一键拉起支付,仅需调用一个方法,降低了使用复杂度。


平台兼容性

Android Android CPU类型 iOS
适用版本区间:8.1 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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);
        }
});

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件支付功能使用Google SDK,参考其官方网站 https://policies.google.com/privacy

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问