更新记录
1.3.0(2025-08-27)
- 升级谷歌支付库 到 billing:8.0.0 V8 版本。
1.2.0(2024-01-30)
- 升级谷歌Google Play 结算服务billing 版本6.1.0 。
1.1.0(2021-09-22)
- 增加谷歌支付功能
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 16.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 18 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
Android 和 ios Google 谷歌授权登录,安卓谷歌支付插件
-
提示,使用 google play 需要海外网络,需要安装谷歌商应。
1.引入插件
const plug=uni.requireNativePlugin("html5app-googlelogin");
IOS 端需要配置 urlschemes, 这个urlschemes 对应的是谷歌开发者后台 客户端的 IOS 端: iOS 网址架构
"ios" : {
"urltypes" : [
{
"urlschemes" : [
"com.googleusercontent.apps.420257196630-t8gudifdfp8k1moocg1edvdsp9fb607j" //iOS 网址架构
],
"documentrole" : "Editor"
}
]
}
授权登录 , 参数 clientId 是应用客户端 id,
- 需求创建 android 客户端,web 客户端,ios 端,三种
- android 端的用的是web 端的clientId ,ios 端的不变
plug.login({
clientId:"420257196630-t8gudifdfp8k1moocg1edvdsp9fb607j.apps.googleusercontent.com"
},function(e){
});
谷歌退出登录
plug.logout();
应用内商品支付, 该方法已弃用
plug.play({SKU_ID:"m123346"},function(e){
});
应用内商品查询, 该方法已弃用
plug.querySku({SKU_ID:"m123346"},function(e){
});
以下是最新新增的谷歌支付方法
2. init : google play 初始化连接, 必须执行该方法,成功后,再操作其他的方法.
//在 谷歌支付之前,先连接谷歌物件,来确认用户是否安装了google Play, 连接成功,说明可以正常使用谷歌。
googleplay.init(function(e){
if(e.code==0)
{
//成功
}else{
//失败
}
});
3.isFeatureSupported : 检查设备是否支持当前的商品支付, 注意:有些 Android 设备安装的可能是旧版 Google Play 商店应用,不支持订阅等某些商品类型。在您的应用进入结算流程之前,您可以调用 isFeatureSupported() 以确定设备是否支持您要销售的商品。
// 0: 訂閱 , 1: 訂閱更新 ,2 : 產品詳情,
googleplay.isFeatureSupported({"type":2},function(e){
console.log(JSON.stringify(e));
if(e.code==0)
{
//支持
}else{
//失败
}
});
4. queryProduct 查询商品
//
//参数: productList ,多数组,商品id
//参数:productType , 商品类型, inapp:针对一次性商品 ,subs:针对订阅
googleplay.queryProduct({"productList":["id01","id02"],"productType":"inapp"},function(e){
console.log(JSON.stringify(e));
if(e.code==0)
{
//成功
// e.list; 商品列表
}else{
//失败
}
});
5. pay2 谷歌支付
//参数:productList ,是多数组,必须先查询商品,得出结果后,再把需要的商品id, 提交到支付,支付支持多个商品同时支付,例如:购物车
//setIsOfferPersonalized 如果应用可能会面向欧盟用户分发,请使用 setIsOfferPersonalized() 方法向用户披露您的商品价格已通过自动化决策进行了个性化设置。setIsOfferPersonalized() 接受布尔值输入。当该值为 true 时,Play 界面会包含披露声明。当该值为 false 时,Play 界面会忽略披露声明。默认值为 false。
googleplay.pay2({productList:["id01","id02"],setIsOfferPersonalized:false},function(e){
console.log(JSON.stringify(e));
if(e.code==0 && !e.purchases)
{
//呼起谷歌支付成功 e.purchases
}else if(e.code==0 && e.purchases){
//支付成功,返回支付商品信息 e.purchases 是一个数组
}else
{
//失败
}
});
6. queryPurchases | 查询购买商品记录
//参数:productType , 商品类型, inapp:针对一次性商品 ,subs:针对订阅
googleplay.queryPurchases({productType:"inapp"},function(e){
console.log(JSON.stringify(e));
if(e.code==0)
{
// e.list 数据列表
}else
{
//失败
}
});
7. consumePurchase 消耗型商品确认
- 根据谷歌文档,如果可以尽量使用后台AIP 接口安全处理商品确认 。
- 消耗型商品对于消耗型商品,如果您的应用具有安全后端,我们建议您使用 purchases.products.consume 可靠地消耗购买交易。请确保购买交易未被消耗,方法是查看 purchases.products.get 调用结果中的 consumptionState。如果您的应用只有客户端而没有后端,请使用 consumePurchase。这两种方法都符合确认要求,并且表明您的应用已将权利授予用户。这些方法也支持您的应用提供与输入购买令牌对应的一次性商品,供用户再次购买。
// 参数:purchaseToken , 来自支付成功后,返回的 purchaseToken 参数数据.
googleplay.consumePurchase({purchaseToken:""},function(e){
console.log(JSON.stringify(e));
if(e.code==0)
{
// 成功
}else
{
//失败
}
});
8.acknowledgePurchase 非消耗型商品确认
- 根据谷歌文档,如果可以尽量使用后台AIP 接口安全处理商品确认 。
- 非消耗型商品 如需确认非消耗型商品的购买交易,如果您的应用具有安全后端,我们建议您使用 Purchases.products:acknowledge 可靠地确认购买交易。请确保购买交易尚未确认,方法是查看 Purchases.products:get 调用结果中的 acknowledgementState。
如果您的应用只有客户端,请在应用中使用acknowledgePurchase。在确认购买交易之前,您的应用应检查它是否已通过使用 Google Play 结算库中的 isAcknowledged 进行确认。
// 参数:purchaseToken , 来自支付成功后,返回的 purchaseToken 参数数据.
googleplay.acknowledgePurchase({purchaseToken:""},function(e){
console.log(JSON.stringify(e));
if(e.code==0)
{
// 成功
}else
{
//失败
}
});