背景
Appstore审核报PGPay SDK不容许上架的问题
A:数字类产品(比方购买会员等不须要配送实物的商品),Apple规定必须应用苹果IAP利用内领取,给Apple分成30%。打包的时候不要勾选微信或支付宝等其余领取形式。如果你提交的包里蕴含了微信支付宝等领取的sdk,即便没应用,Appstore也会认为你有暗藏形式,当前会绕过iap,不给Apple分成,因而回绝你的App上线。云打包时,manifest里选上领取模块,但sdk配置里去掉微信领取和支付宝领取。很多开发者的Android版是蕴含微信和支付宝领取的,此时留神离开判断。
实现iap领取
1.Appstore创立我的项目
在苹果开发者核心https://developer.apple.com/a...
2.进入创立的我的项目创立内购我的项目
内购我的项目有四种类型:
消耗型我的项目
用户能够购买各种消耗型我的项目 (例如游戏中的生命或宝石) 从而进一步摸索 app 。消耗型我的项目只可应用一次,应用之后即生效,可再次购买。
非消耗型我的项目
用户可购买非消耗型我的项目,解锁更多 app 内的进阶性能。非消耗型我的项目只需购买一次,不会过期 (例如修图 app 中的其余滤镜)。Apple 能够托管您的非消耗型产品。
主动续期订阅
用户可购买周期性继续的服务或更新的内容 (例如云存储或每周更新的杂志)。此类订阅会主动续期,除非用户抉择勾销。
非续期订阅
用户可购买有时限性的服务或内容 (例如线上播放内容的季度订阅)。此类的订阅不会主动续期,用户须要逐次续订。
留神:内购我的项目的productid是惟一的 不可反复。
创立实现之后:
3.uniapp实现iap领取:
大抵流程:
首先调用plus.payment.getChannels获取领取通道,IAP领取通道的ID为“appleiap”
调用ID为“appleiap”的PaymentChannel对象的requestOrder办法,像Appstore申请无效的商品详情。留神:需先调用requestOrder办法而后在调用payment.request办法,否则间接调用payment.request将会报错。
调用plus.payment.request办法发动领取申请,传入statement的参数为JSON对象,能够设置如下参数
productid String(必选)要领取的商品的标识(必须是调用requestOrder返回的无效的商品标识)
username String(可选)购买商品用户的用户名
quantity String (可选)购买商品的数量,如果不填写默认为1
调用后端接口校验订单信息
3.1获取领取通道:
3.2通过productid获取对应商品信息
plusReady() { uni.showLoading({ title: "加载中", }); const that = this; const IAPOrders = ["1", "4", "3"]; //uni-app中将此function里的代码放入vue页面的onLoad生命周期中 plus.payment.getChannels( function(channels) { console.log("channels-------------", channels); for (var i in channels) { if (channels[i].id == "appleiap") { console.log("channels[i]-----------", channels[i]); that.iapChannel = channels[i]; that.iapChannel.requestOrder( IAPOrders, function(event) { console.log(event, event.length); uni.hideLoading(); for (var j in event) { that.vipList.push( Object.assign(event[j], { id: event[j].productid, goodsName: event[j].title, }) ); that.goodInfo = that.vipList[0]; console.log(that.vipList); } }, function(errormsg) { console.log( "获取领取通道失败:" + JSON.stringify(errormsg) + "-" + errormsg.message ); uni.showToast({ title: '获取会员信息失败,请稍后重试' }) uni.navigateBack() uni.hideLoading(); } ); } } }, function(e) { console.log("获取领取通道失败:" + e.message); } ); }
这里须要留神:
1.manifest.json中须要勾选利用内领取,打自定义包进行调试
2.IAPOrders就是创立的内购我的项目productid数组
3.3.调起领取
uni.requestPayment({ provider: "appleiap", orderInfo: { productid: productid, }, success: (result) => { console.log("success--------------------", result); this.getIapPayChecked(result); }, fail: (e) => { uni.showToast({ title: '领取失败' }) that.loading = false; }, complete: () => { console.log("payment完结"); that.loading = false; }, });
留神:
1.沙箱环境获取回调工夫较长,须要急躁期待
2.消耗型我的项目只能购买一次,
3.如果点击领取始终没有任何反馈,能够试试卸载软件重新安装