更新记录
1.0.0(2025-09-11)
uts版本第一版,还在测试中。
平台兼容性
uni-app(4.07)
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | 12 | × |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × | × | × |
其他
多语言 | 暗黑模式 | 宽屏模式 |
---|---|---|
√ | √ | √ |
船新版本苹果内购,uts版本,接口更简洁,使用更方便。本内购插件可以不用服务器
(还在测试一些场景中~)
如果你想使用原生语言插件,前往原生语言插件。
特别注意,验证购买和订阅的sandBox参数上线一定要写成false
特别注意,验证购买和订阅的sandBox参数上线一定要写成false
特别注意,验证购买和订阅的sandBox参数上线一定要写成false
内购是苹果应用内购买,包括订阅或者各种vip解锁功能除去广告等
内购类型说明
内购大致分为订阅型和非订阅型,订阅型又分为自动续期和不续期;非订阅型就是那些一次性购买的,比如一次购买永久解锁,或者6元购买100个金币这种。
completeTransactions 这个方法需要在应用启动的时候去调用,因为可能存在没有完成的交易,防止漏掉一些单子
App.vue
// #ifdef APP-IOS
import { HXRPurchase } from '@/uni_modules/hxr-purchase-uts/utssdk/app-ios'
// #endif
onLaunch: function () {
// #ifdef APP-IOS
HXRPurchase.completeTransactions((productId: string) => {
//如果需要传服务器,就获取票据上传
HXRPurchase.getReceiptString((code: string, msg: string) => {
if(code == "ok") {
//msg就是票据信息
} else {
console.log(msg);
}
});
//本地验证购买
// HXRPurchase.verifyBuy()
// HXRPurchase.verifySubscription()
});
// #endif
console.log('App Launch')
}
使用实例
// #ifdef APP-IOS
import { HXRPurchase } from '@/uni_modules/hxr-purchase-uts'
// #endif
buy() {
HXRPurchase.buyProduct("product.unique.id", 1, "", (code : string, msg : string) => {
if (code == "purchased") {
//这种情况其实就已经购买成功了。为了保险需要验证票据
//如果你需要同步票据到服务器就获取票据上传
HXRPurchase.getReceiptString((code : string, msg : string) => {
if (code == "ok") {
//msg就是票据信息
} else {
console.log(msg);
}
});
//如果没有服务器,或不需要上传就直接验证就可以了。根据购买的是不是续费选择调用一个即可
// HXRPurchase.verifyBuy()
// HXRPurchase.verifySubscription()
} else if (code == "deferred") {
/*
//仅表示交易暂未完成,可能后续转为成功或失败
//家庭共享: 当用户通过家庭共享购买订阅时,需主账号成员授权,此时交易状态会变为deferred
//儿童账户或家长控制: 若购买涉及儿童账户,需家长同意(如输入Apple ID密码验证),交易会延迟至授权完成*/
} else {
//出错的各种场景,有很多错误code
if (code == "paymentCancelled") {
//用户取消购买
} else {
console.log(`code: ${code}, msg: ${msg}`);
/*
case unknown = 0
case clientInvalid = 1
case paymentCancelled = 2
case paymentInvalid = 3
case paymentNotAllowed = 4
case storeProductNotAvailable = 5
case cloudServicePermissionDenied = 6
case cloudServiceNetworkConnectionFailed = 7
case cloudServiceRevoked = 8
case privacyAcknowledgementRequired = 9
case unauthorizedRequestData = 10
case invalidOfferIdentifier = 11
case invalidSignature = 12
case missingOfferParams = 13
case invalidOfferPrice = 14
case overlayCancelled = 15
case overlayInvalidConfiguration = 16
case overlayTimeout = 17
case ineligibleForOffer = 18
case unsupportedPlatform = 19
case overlayPresentedInBackgroundScene = 20
*/
}
}
});
},
getReceipt() {
HXRPurchase.getReceiptString((code : string, msg : string) => {
if (code == "ok") {
//msg就是票据信息
} else {
console.log(msg);
}
});
},
verifyBuy() {
//注意sandBox参数,测试阶段是true,上线一定要改成false
HXRPurchase.verifyBuy("product.unique.id", "", true, (code : string, msg : string) => {
if(code == "purchased") {
//已经购买,可以解锁功能了
} else if(code == "notPurchased") {
//没有购买
} else {
console.log(`code: ${code}, msg: ${msg}`);
//noReceiptData 没有票据信息
//networkError
//error 其他问题
}
});
},
verifySubscription() {
//注意sandBox参数,测试阶段是true,上线一定要改成false
HXRPurchase.verifySubscription("product.unique.id", "", true, true, (code : string, msg : string) => {
if(code == "purchased") {
//已经购买,此时msg是订阅到期时间的时间戳
} else if(code == "notPurchased") {
//没有购买
} else if(code == "expired") {
//订阅已经到期,msg是订阅到期时间的时间戳
} else {
console.log(`code: ${code}, msg: ${msg}`);
//noReceiptData 没有票据信息
//networkError
//error 其他问题
}
});
},
restorePurchases() {
HXRPurchase.restorePurchases((products: string[]) => {
if(products.length > 0) {
//如果是订阅,验证一下订阅到期没有。
//如果是一次性购买,不用验证,直接是成功
} else {
//没得可恢复的购买
}
});
}