####由于公司项目里面有一个类似购买一个时期的产品,原本使用消耗式内购来做,但是被苹果审核拒绝了,苹果建议(要求)使用订阅式内购来做这个,于是就来研究一下

#####1.第一步添加内购产品

首先还是添加内购产品,但是这次添加的就不是消耗型项目了,而是添加订阅型项目,添加的订阅型项目是可以分为不同的组,比如组A里面包含订阅一周的产品(10元),包含订阅一月的产品(20元);组B里面包含订阅一周的产品(15元),包含订阅一月的产品(30元);不同组的产品是相互直接没有影响的,可以同时存在多个(比如我购买了A组的产品1,B组的产品1);但是相同组的产品是只能同时存在一个;


点击创建之后会出现下图

点击下一步之后会出现是否创建分组,我图片中已经显示创建处理订阅组A,订阅组A,这里就不在截图显示了

#####2.第2步添加沙盒测试帐号

点击+添加沙盒测试帐号,沙盒帐号的作用就是你在iPhone 手机上登录这个测试帐号来测试你的内购项目可以不用真正花钱

#####3.第3步添加共享密钥

#####4.第4步编写代码

我是直接使用git上的一个三方库YQInAppPurchaseTool,只是在其基础上稍作改动,只是修改了一下方法

#pragma mark 验证购买凭据
/***  验证购买凭据**  @param ProductID 商品ID*/
- (void)verifyPruchaseWithID:(NSString *)ProductID
{// 验证凭据,获取到苹果返回的交易凭据// appStoreReceiptURL iOS7.0增加的,购买交易完成后,会将凭据存放在该地址NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];// 从沙盒中获取到购买凭据NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];// 发送网络POST请求,对购买凭据进行验证//In the test environment, use https://sandbox.itunes.apple.com/verifyReceipt//In the real environment, use https://buy.itunes.apple.com/verifyReceipt// Create a POST request with the receipt data.NSURL *url = [NSURL URLWithString:checkURL];NSLog(@"checkURL:%@",checkURL);// 国内访问苹果服务器比较慢,timeoutInterval需要长一点NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0f];request.HTTPMethod = @"POST";// 在网络中传输数据,大多情况下是传输的字符串而不是二进制数据// 传输的是BASE64编码的字符串/**BASE64 常用的编码方案,通常用于数据传输,以及加密算法的基础算法,传输过程中能够保证数据传输的稳定性BASE64是可以编码和解码的*/NSString *encodeStr = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\", \"exclude-old-transactions\" : \"true\", \"password\" : \"1f0aae19eb7f344a818216af37d3c3f456\"}", encodeStr];NSData *payloadData = [payload dataUsingEncoding:NSUTF8StringEncoding];request.HTTPBody = payloadData;// 提交验证请求,并获得官方的验证JSON结果NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];// 官方验证结果为空if (result == nil) {//NSLog(@"验证失败");//验证失败,通知代理[self.delegate IAPToolCheckFailedWithProductID:ProductIDandInfo:result];return;}NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:resultoptions:NSJSONReadingAllowFragments error:nil];//NSLog(@"RecivedVerifyPruchaseDict:%@", dict);if (dict != nil) {// 验证成功,通知代理// bundle_id&application_version&product_id&transaction_id [self.delegate IAPToolBoughtProductSuccessedWithProductID:ProductIDandInfo:dict];}else{//验证失败,通知代理[self.delegate IAPToolCheckFailedWithProductID:ProductIDandInfo:result];}
}

上面代码里面的变量payload里面的password就是第三步生成的共享密钥

#####5.第5步就是数据传送给后台了

在把收据传给苹果验证,验证结束后苹果会把当前项目的开始时间,到期时间都返回给你,当然你可以可以直接把验证放在后台
验证返回的字段大致有一下:
latest_receipt 最新凭证
latest_receipt_info 最新凭证详情(可能会有多个,因为是不同组的产品,产品id是不同的)
expires_date 到期时间
expires_date_ms 到期时间毫秒
expires_date_pst 到期时间(太平洋的时间)
is_in_intro_offer_period 是否是在试用期
original_purchase_date 最初的购买时间
original_purchase_date_ms 最初的购买时间毫秒
original_purchase_date_pst 最初的购买时间(太平洋的时间)
product_id 产品id
purchase_date 最新的购买时间
purchase_date_ms 最新的购买时间毫秒
purchase_date_pst 最新的购买时间(太平洋的时间)

以上就是这次订阅内购的实践,过程里面还会遇到很多坑,比如消耗型内购起名字和简介不能出现货币的名称(比如人民币),AppStore 审核的时候链接改为正式链接,其实苹果审核的时候也是需要测试链接,只有当上线了才能使用正式链接,这个地方后台注意一下,如果是指定的错误码是21007(此收据来自测试环境,但已发送到生产环境进行验证。而是将其发送到测试环境。)或者是21008 (此收据来自生产环境,但已发送到测试环境进行验证。而是将其发送到生产环境。)后台更换一下验证路径;漏单处理等其它的内购问题就不在一一说了;

如果能关注一下万分感谢“悦人杂记”微信公众号二维码:

###参考链接:
苹果官网内购文档
收据验证编码文档
iOS订阅型内购要点

关于iOS订阅型内购开发相关推荐

  1. iOS订阅型内购要点

    订阅型内购, 有一套完整的销售体系, 这一点非常重要. 以往的内购app, 一般上都使用我们自己的销售体系, 然后跟苹果的内购配合起来, 尤其是消耗性内购, 在我们自己的商品体系中, 加上一个ID对应 ...

  2. 记一次ios内购开发中踩的坑

    记一次ios内购开发中踩的坑 前段时间好不容易把APP中的非续期内购上架成功了,过程也是一波三折,各种问题,但最终还是内购审核通过了 通过后我以为就没问题了,但第二天打开xcode运行应用后,准备验证 ...

  3. iOS 内购开发流程(简洁版)

    内购开发流程 一.在开发者账号里面设置协议.税务和银行信息 二.在开发者账号里面创建内购的项目 三.代码集成 注意事项 必须用真机测试: 测试的时候必须退出自己的apple ID,弹出页面后登陆沙盒的 ...

  4. iOS:苹果内购实践

    iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...

  5. 苹果内购开发总结(含掉单问题优化)

    1.后台查询充值记录 2018年3月27日 苹果内购开发(含掉单问题优化) 一.通用流程梳理 1.原来老的的流程(第七步有掉单风险) 第1. 先创建订单 第2.订单返回正常后(有订单号),启动苹果购买 ...

  6. iOS通讯录,蓝牙,内购等开发系列

    –系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系 ...

  7. iOS IAP应用内购详细步骤和问题总结指南

    最近公司在做APP内购会员功能 遇到了很多问题 总结记录一下 首先一定要区分Apple pay 和IAP内购的区别 可以先去看一下官方文档地址 有每个步骤的详细解释 本篇文章分为:1. 内购支付流程: ...

  8. 【iOS】苹果内购调研

    参考文章 官方文档 iOS开发内购全套图文教程 App Store上架指导 苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的电子书阅读器怎么解决这个问题? 应用内购(In-A ...

  9. IOS OC IPA内购流程

    IOS 内购分为四种商品类型: 消耗品项目 非消耗品项目 自动续期订阅 非续期订阅 基本实现流程 添加支付监听 [[SKPaymentQueue defaultQueue] addTransactio ...

最新文章

  1. centos下axel安装与使用
  2. 知道焊缝长度如何确定节点板尺寸_管桁架加工之钢结构焊接节点处理
  3. 鼎捷软件怎么样_凯里物流仓储怎么样
  4. 丑憨批的html笔记
  5. 38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
  6. 重新安装mysql5.7.21_linux 安装mysql 5.7.21详解以及安装过程中所遇问题解决
  7. 前端学习(3027):vue+element今日头条管理-关于图标的处理
  8. Flask爱家租房--房屋管理(获取房屋详情)
  9. callback回调使用 vue_Vue实现剪切板图片压缩
  10. 机器学习之KNN 算法
  11. 16 ValidationSummary
  12. 网站项目打包成app
  13. fm -rf 删除 恢复
  14. 请画出使用mapreduce对英文句子_微信英文培训:50句出国旅行英语
  15. reentrantlock与synch区别优点
  16. DNS故障分析【转】
  17. 解决curl/wget: (7) Failed to connect to github.com port 443: Connection refused无法解析主机或请求拒绝问题
  18. 工厂方法模式(雷锋依然在人间)
  19. 第1年的放射学侵蚀进展是早期RA进一步侵蚀性进展的新预测指标
  20. IDEA创建maven项目没有src/main/java目录问题解决

热门文章

  1. Android开发一个闹钟
  2. 智能默认值:关于库和框架
  3. U-Boot启动内核流程
  4. 重新连接HRC+ SmartFoxServer 2X
  5. AutoJs 微信删除好友工具
  6. Windows cannot be installed to this disk. The selected disk has an MBR partition table
  7. npm离线安装npm包的两种方法
  8. 基于MATLAB的汽车出入库计时计费系统
  9. Mac 上有哪些鲜为人知且极大提高效率的工具?
  10. 知乎上最火的租房经验