更新记录
2.0.1(2022-09-15)
全新升级,更简洁的api调用,更简洁的流程 增加本地验证,没有服务器也可以完成内购 增加新接口,减少丢单
1.1.0(2022-02-21)
增加恢复交易功能,从而修复漏单的bug
1.0.0(2021-02-02)
完成内购功能
查看更多平台兼容性
Android | iOS |
---|---|
× | 适用版本区间:9 - 15 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
一、插件说明
测试时需要你自己创建商品后测试 测试时需要你自己创建商品后测试 测试时需要你自己创建商品后测试
userId请传入字符串类型
二、解释
1)内购商品分几种,恢复购买只是针对非消耗型
- PurchaseTypeConsumable = 0, ///消耗型,比如金币
- PurchaseTypeNonConsumable = 1, ///非消耗型,比如去除广告
- PurchaseTypeAutoRenewable = 2, ///自动续订的,比如网易云VIP
- PurchaseTypeNonRenewing = 3, ///非自动续期,比如买一个月VIP这种,不会自动续期
2)内购其实不需要服务器也能完成,就是采用本地验证,就是本地调用苹果服务器去验证,只是说没有服务器去验证安全,如果你没有服务器,也可以使用插件内的本地验证完成验证
3)有时候内购会因为一些操作打断,所以为了防止丢单,在每次应用启动你都应该调用compleTransactions
来防止丢单
4)参数说明,每个接口详细使用可以参考demo,需要注意参数类型
,具体每个接口调用都有demo演示,注意本地验证的接口参数不能传错。
5)关于回调
///completeTransactions回调,会返回成功的商品id和收据信息,
如果你使用服务器验证,就将数据上传服务器即可,如果使用本地验证,
则调用本地验证接口
{"msg":"支付成功", "code":"success",
"productId" : "productId", "data": "收据信息"}
{"msg":"没有成功", "code":"fail", "productId" : "productId"}
///verifyTransactions回调,
{"msg":"支付成功,且验证成功", "code":"success"}
{@"msg":@"没有购买成功", @"code":@"fail"}
///restoreCompletedTransactions回调,会返回恢复成功的商品列表,和失败的列表,列表是商品id
{"msg":"操作完成", "code":"success", "data" : result}
///buyProduct回调,
{"msg":"请选择商品", "code":"noproduct"} ///没有传商品id
{"msg":"deferred", "code":"deferred"} ///交易队列还在进行,结果未知
{"msg":"支付成功", "code":"success", "data": "收据信息"} ///成功,返回了收据信息,下一步你应该进行验证
{"msg":"unknown error", "code":"unknown"}
{"msg":"clientInvalid", "code":"clientInvalid"}
{"msg":"paymentCancelled", "code":"paymentCancelled"}
{"msg":"paymentInvalid", "code":"paymentInvalid"}
{"msg":"paymentNotAllowed", "code":"paymentNotAllowed"}
{"msg":"storeProductNotAvailable", "code":"storeProductNotAvailable"}
{"msg":"cloudServicePermissionDenied", "code":"cloudServicePermissionDenied"}
{"msg":"cloudServiceNetworkConnectionFailed", "code":"cloudServiceNetworkConnectionFailed"}
{"msg":"cloudServiceRevoked", "code":"cloudServiceRevoked"}
三、插件使用
具体使用请看示例工程,有问题加Q:724300087,请备注说明,或者加群:235114842
<template>
<view class="content">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="title">{{title}}</text>
</view>
<button @tap="buy">buy</button>
<button @tap="restore">restore</button>
</view>
<view class="" style="text-align: center; color: #cf6c6c;">
</view>
</template>
<script>
var hxrinpurchase = uni.requireNativePlugin("HXR-InPurchaseManager");
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
},
methods: {
restore: function(e) { ///恢复购买只只是针对非消耗性商品
let parameter = {"userId" : "你的用户标识"} ///用户标识没有可以不传或者传空字符串,类型是字符串
hxrinpurchase.restoreCompletedTransactions(parameter,function(res){
////调用这个接口会返回恢复成功的商品id,和失败的id,两个都是数组
if(res && res.data) {
let successProducts = res.data.success
let failProducts = res.data.fail
///该发放奖励就发放
}
});
},
buy: function(e) {
///用户标识没有可以不传或者传空字符串,类型是字符串
/// quantity 商品购买数量,一般情况是1,根据你的内购决定
hxrinpurchase.buyProduct({'productId' : 'com.xxx.ccccc', 'userId':'xxxx', "quantity": 1}, function(res) {
uni.showModal({
title:"提示",
content:JSON.stringify(res),
confirmText: "确认"
});
if(res && res.code == 'deferred') {
///交易队列还在进行,结果未知
} else if (res && res.code == 'success') {
///成功,下一步应该验证收据
if(true) { ///本地验证
///本地验证参考App.vue
} else {
///上传数据到服务器
}
} else {
///发生其他错误
}
});
}
}
}
</script>
<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.logo {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50rpx;
}
.text-area {
display: flex;
justify-content: center;
}
.title {
font-size: 36rpx;
color: #8f8f94;
}
</style>