IOS OC IPA内购流程
IOS 内购分为四种商品类型:
- 消耗品项目
- 非消耗品项目
- 自动续期订阅
- 非续期订阅
基本实现流程
- 添加支付监听
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
2.删除支付监听
在界面销毁处,添加删除支付监听,或者在 deallo方法处销毁
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
3.查询商品
IOS的查询商品信息、支付,都需要先调用以下方法,获取SKProduct后,进行购买。
SKProductsRequest *buyRequets = [[SKProductsRequest alloc] initWithProductIdentifiers:productIDs];buyRequets.delegate = self;[buyRequets start];
4.实现SKProductsRequestDelegate接口
//MARK: - SKProductsRequestDelegate
//接受到产品返回的信息
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {NSArray *products = response.products;if (products == nil || products.count <= 0) {DLog(@"商品均不存在,请检查传递的商品ID"); return;}if (response.invalidProductIdentifiers.count > 0) {DLog(@"不可用的商品ID: %@",response.invalidProductIdentifiers); }//向苹果发送请求for(SKProduct *product in products){if ([self.productIdentifier isEqualToString:product.productIdentifier] ) {//self.productIdentifier 研发传递过来需要购买的商品ID//支付逻辑SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product];payment.applicationUsername = applicationUsername;[[SKPaymentQueue defaultQueue] addPayment:payment];}}
}
- 实现SKRequestDelegate接口
//MARK: - SKRequestDelegate
//请求商品列表等请求完后的回调
- (void)requestDidFinish:(SKRequest *)request {if ([request isMemberOfClass:[SKReceiptRefreshRequest class]]) {DLog(@"刷新凭据完成,开始检查是否有遗留的校验订单");//此处需要重新校验订单 }DLog(@"反馈信息结束");
}
//请求商品列表失败等回调
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {DLog(@"购买请求错误: %@", error);
}
- 实现SKPaymentTransactionObserver接口
当用户进入购买流程后,购买结果会在次回调中响应。
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {for (SKPaymentTransaction *tran in transactions) {switch (tran.transactionState) {case SKPaymentTransactionStatePurchasing:DLog(@"商品加入列表"); break;case SKPaymentTransactionStatePurchased:{DLog(@"商品购买成功"); NSString *applicationUsername = tran.payment.applicationUsername;NSString *orginalID;if (tran.originalTransaction) {orginalID = tran.originalTransaction.transactionIdentifier;// 如果是自动续费的订单,originalTransaction会有内容DLog(@"自动续费的订单,originalTransaction =%@",tran.originalTransaction);} else {// 普通购买,以及第一次购买自动订阅DLog(@"普通购买,以及第一次购买自动订阅");} [[SKPaymentQueue defaultQueue] finishTransaction:tran];break;} case SKPaymentTransactionStateFailed:{ DLog(@"商品购买失败");[[SKPaymentQueue defaultQueue] finishTransaction:tran]; }break;case SKPaymentTransactionStateRestored:DLog(@"已经购买过此商品 =%@",tran.payment.productIdentifier); [[SKPaymentQueue defaultQueue] finishTransaction:tran];break;case SKPaymentTransactionStateDeferred:DLog(@"交易状态未决定"); break;default:[[SKPaymentQueue defaultQueue] finishTransaction:tran];break;}}
} //所有的Restore结束后,进入此回调
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {}
如果需要透传参数(把参数传递给苹果服务器,然后再把此参数原样返回,可用于标识用户),需要设置:
SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product];//设置透传参数payment.applicationUsername = applicationUsername;
获取透传参数:
transaction.payment.applicationUsername
对于 1.非消耗 2.自动续期订阅 3.非续期订阅 要提供restore功能
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
IOS OC IPA内购流程相关推荐
- iOS苹果内购流程(Apple Pay)
好文:https://github.com/lintide/ApplePayDemo 苹果内购流程 字数631 阅读133 评论1 喜欢6 1.登录开发者中心[开发者中心链接](https://dev ...
- iOS开发·内购流程
2019独角兽企业重金招聘Python工程师标准>>> 说明: 涉及到金额交易,苹果审核的一般严格许多.苹果在涉及需要支付中间币的购买必须走苹果内购(例:点券.钻石.K币等等),若是 ...
- iOS内购流程文档-Lion
iOS内购流程: iOS内购 什么时候用到呢? 虚拟产品就需要用到iOS内购; 购买的商品,是在本app中使用和消耗的,就一定要用内购,否则会被拒绝上线,例如:游戏币,在线书籍,app中使用的道具等. ...
- iOS:苹果内购实践
iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...
- iOS-iOS内购流程(手把手图文教程)
前言 一直觉得苹果生态圈很安全,iOS操作系统也很流畅,而且软件有严格的审核机制,软件来源唯一(当然是你不越狱),但是这也为苹果的霸权铺路:上家公司做了一个APP,可以充值虚拟金币,但是如果是虚拟道具 ...
- 【iOS】苹果内购调研
参考文章 官方文档 iOS开发内购全套图文教程 App Store上架指导 苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的电子书阅读器怎么解决这个问题? 应用内购(In-A ...
- iOS开发支付 — 内购(IAP)
为什么要使用内购? 如果你购买的商品,是在本App中使用和消耗的,就一定要用内购,否则会被拒绝上线,例如:游戏币.在线书籍.直播中用来打赏用的金币.app中使用的道具等.如果是直接购买商城之类的快递包 ...
- 关于iOS订阅型内购开发
####由于公司项目里面有一个类似购买一个时期的产品,原本使用消耗式内购来做,但是被苹果审核拒绝了,苹果建议(要求)使用订阅式内购来做这个,于是就来研究一下 #####1.第一步添加内购产品 首先还是 ...
- IOS内购流程从0-1手把手教会
苹果掌握着可能是全球最重要的APP分发渠道,然而30%的抽成近年来也被人批评,现在苹果似乎也看到反对意见了,从2021年1月1日开始,部分小型企业的分成费用降低到15%. 据报道,苹果将于2021年1 ...
最新文章
- mysql自动挂载存储_Linux开机自动挂载存储
- SVG基本形状及样式设置
- 电路板必须用c语言编程吗,上大学才知道绿油油的板子叫PCB,如何成为一名电子工程师...
- 与登录shell相关的文件
- :host :host-context ::ng-deep详解
- 带注释的控制器– Spring Web / Webflux和测试
- 万字长文!java读取json文件数据给对象
- 编码规范 | Java函数优雅之道(下)
- 持久化框架数据持久化框架(JPA)及其具体实现
- linux sftp 增加用户(centos)
- 2009年计算机一级考试真题及答案
- 宝塔面板搭建方维直播图文教程
- RFC(请求注解)--各种协议-标准
- springboot基于协同过滤算法的书籍推荐毕业设计源码101555
- php整数溢出 ctf,PWN INTEGER OVERFLOW 整数溢出
- 微软新版edge浏览器如何开启画中画模式 (微软新版edge)
- JS高级 之 RegExp - 正则表达式
- 中国互联网11个创业派系456创始人名单大全
- python animation 轨迹_在jupyter noteb之外显示动画
- 使用QE绘制Band Structure