ios apple苹果app不能使用微信支付宝充值打赏送礼,请问怎么走苹果内购?
网友回复
是的,必须走苹果内购,你看微信打赏由于没走苹果内购,没使用IAP,直接下架,后来微信去掉了打赏。
那么什么是IAP,即in-app-purchase。(虚拟商品如:课程、视频、音乐等数字产品只能走apple 的内购),苹果要扣除30%的销售额,再扣除一点相关的交易税,用户到手将不到7成。如果是实体的商品是可以使用微信支付宝支付的。内购流程
1.获取内购列表(从App内读取或从自己服务器读取)
2.App Store请求可用的内购列表
3.向用户展示内购列表
4.用户选择了内购列表,再发个购买请求,收到购买完成的回调(购买完成后会把钱打给申请内购的银行卡内)
5.购买流程结束后, 向服务器发起验证凭证以及支付结果的请求
6.自己的服务器将支付结果信息返回给前端并发放虚拟产品
7.服务端的工作比较简单,分4步:
7.1.接收ios端发过来的购买凭证。
7.2.判断凭证是否已经存在或验证过,然后存储该凭证。
7.3.将该凭证发送到苹果的服务器验证,并将验证结果返回给客户端。
7.4.如果需要,修改用户相应的会员权限。
7.5.考虑到网络异常情况,服务器的验证应该是一个可恢复的队列,如果网络失败了,应该进行重试。
简单来说就是将该购买凭证用Base64编码,然后POST给苹果的验证服务器,苹果将验证结果以JSON形式返回。二、流程
1.登录苹果开发者网站新建一个App应用:

3.创建内购商品:
(1).商品名称根据你的消费道具的实际意义来说明,比如“100颗宝石”,“100金币”等。 (2).产品ID是比较重要的,由项目自定义,只要唯一即可,我一般都是用App的bundleID加一个后缀来表示,这样既跟项目关联又具有唯一性。 (3).价格等级的话“查看价格表”中有对应的说明,可以对照着表中每个国家的货币价格与等级来选择。
4.添加沙盒测试者
沙盒测试环境下苹果不会抽成,购买成功后直接返回商品。appid 需要时从未与apple id 从未关联过的账号
appid 可以是任何有效的邮箱地址
5.内购代码封装IapManager.swift:
// // IapManager.swift // tai_chi // // Created by vincent on 2019/10/9. // Copyright © 2019 vincent. All rights reserved. // import Foundation import StoreKit //内购协议 @objc protocol IapManagerProtocol { //商品请求结果回调 func productsResponse(_ response:SKProductsResponse?,error:Error?) //交易成功回调 func completedTransaction(_ transaction:SKPaymentTransaction) //交易失败回调 @objc optional func transactionFail(transaction:SKPaymentTransaction) } //内购管理 class IapManager : NSObject,SKProductsRequestDelegate,SKPaymentTransactionObserver { private static var instance:IapManager? var delegate:IapManagerProtocol? var requestResponse:SKProductsResponse? var requestErr:Error? override init() { super.init() SKPaymentQueue.default().add(self) } //静态方法 static func shared() -> IapManager{ if instance == nil { instance = IapManager() } return instance! } //判断app 是否允许...
点击查看剩余70%