IAP 促销优惠后端接入指南

  • 前言
    • 使用场景
    • 接入流程
      • 1. 后台配置
      • 2. 判断用户是否可以使用促销优惠
      • 3. 生成签名
      • 4. 解析优惠字段

前言

促销优惠是 iOS12.2新增的针对 IAP 自动续期订阅类型产品更加灵活的促销方式, 整体流程如下图, 官方文档见 https://developer.apple.com/documentation/storekit/in-app_purchase/implementing_subscription_offers_in_your_app?language=objc


那我们的server需要做什么呢?
1.判断用户是否可以使用优惠
2.对参数进行签名
3.解析收据中促销优惠相关字段

使用场景

我们的场景是一个连包会员业务, ios端使用iap的自动续期订阅类型

接入流程

1. 后台配置

配置主要分为两步
1.登陆app store connect, 找到「用户和访问」->「密钥」->「订阅」, 点击+号, 创建完成后, 点击下载密钥文件(是一个采用ECC算法的私钥文件), 这个文件只能下载一次, 一定要保存好, 并且不要随意泄漏给其他人. 这里的 密钥ID 后面流程会用到

2.登陆app store connect, 找到 「我的app」 -> 「功能」-> 「你们的订阅商品」-> 「订阅价格」, 点击 + 号, 选择 创建促销优惠, 这时需要设置我们的优惠名称, 优惠代码(该字段在后续流程会用到), 点击下一步后, 创建优惠价格

2. 判断用户是否可以使用促销优惠

这个就是具体的业务逻辑了, 苹果支持 当前正在订阅中 以及 已经过期的订阅 使用促销优惠, 但是要注意一点, 第一次购买app下的订阅商品时不能使用促销优惠, 客户端调用促销优惠相关逻辑时会报错, 这种case 我们的处理方案是, 客户端解析到该异常, 传递一个重试标记, 服务端记录重试标记, 当标记存在时不返回优惠, 任意一笔订阅交易成功后删除标记.

3. 生成签名

签名的生成规则 https://developer.apple.com/documentation/storekit/in-app_purchase/generating_a_signature_for_subscription_offers?language=objc
签名字段如下

字段名 来源
appBundleID 值为 app store connect中「我的APP」-> 「APP信息」->「综合信息」->「套装ID」
keyIdentifier 后台配置第一步中的密钥ID
productIdentifier 后台配置的商品code
offerIdentifier 后台配置第二步中的优惠产品code(需要根据业务场景具体选择一个优惠产品code)
applicationUsername 依赖客户端具体的使用, 需要跟客户端确认
nonce UUID, 一定要满足UUID的标准格式, 不然会报错, 服务端是java的话可以使用java.util.UUID.randomUUID().toString()
timestamp 时间戳

注意!
苹果使用的加密算法为ECC, 服务端是java的话, 签名时使用
KeyFactory.getInstance(“ec”);
Signature.getInstance(“SHA256WithECDSA”);
其余签名代码省略, 请读者自行查找

4. 解析优惠字段

当用户使用促销优惠支付后, 收据in_app和latest_receipt_info 中会出现 promotional_offer_id 字段, 值为使用当优惠的code

IAP 促销优惠(promotional offer)后端接入指南相关推荐

  1. IAP 自动续费后端接入指南

    IAP 自动续费后端接入指南 前言 使用场景 接入流程 1. 后台配置 2. 方案选择 三种方案的对比 最终方案 3.关键点 3.1 续费表扣费状态的设计 3.2 如何判断用户续费成功? 3.3 如何 ...

  2. 后端开发面试自我介绍_一定是最适合你的后端面试指南

    原标题:一定是最适合你的后端面试指南 本文转自公众号:Java面试通关手册 友情提示:阅读+独立思考的方式学习本文效果最佳.本文干货较多,如果大家觉得不错请转发给可能需要本文的朋友哦!最后,不要忘记给 ...

  3. 写给刚入门的前端工程师的前后端交互指南

    转自原文 写给刚入门的前端工程师的前后端交互指南 作为刚接触前端的不久的童鞋,大家都会兴奋于CSS和JS所带来漂亮界面,然而,前端工程师除了UI重构外,还有非常重要的职责在正确的区域渲染出服务端的数据 ...

  4. C#微信公众号开发系列教程二(新手接入指南)

    此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...

  5. Apollo使用指南(二)公共组件接入指南

    2.1 公共组件和普通应用的区别 公共组件是指那些发布给其它应用使用的客户端代码,比如CAT客户端.Hermes Producer客户端等. 虽然这类组件是由其他团队开发.维护,但是运行时是在业务实际 ...

  6. Apollo使用指南(一)普通应用接入指南

    写在前面: 最近在学习apollo方面的知识,apollo目前托管在GitHub上,相关文档也主要在GitHub上.出于学习的需要,也因为最近众所周知的旧问题和新阻碍,为了能更方便和稳定的访问到这些内 ...

  7. RePlugin插件接入指南

    RePlugin插件接入指南 只需两步,就能让您的App变成"RePlugin插件": 有关"混淆" RePlugin的AAR自带Proguard文件,您无需关 ...

  8. RePlugin 主程序接入指南

    RePlugin 主程序接入指南 只需三步,就能让您的"主程序"接入RePlugin: 注意:目前有开发同学反馈,开启Instant Run时可能会出现运行时异常情况,请临时关掉此 ...

  9. 【微信服务号开发】01.接入指南

    前言 当作为小白,来开发微信的时候,只依据官方文档来开发是很痛苦的,怎么配置,怎么编写代码文件,怎么让映射到外网访问,问题很多,比较痛苦. 下面内容来解决这些痛点,有不懂的问题,可以在下面留言评论哦. ...

最新文章

  1. 关于Spark NLP学习,你需要掌握的LightPipeline(附代码)| CSDN博文精选
  2. 深入认识二进制序列化--记一次生产事故的思考
  3. android开发字体样式,Android开发中修改程序字体的样式
  4. 手机版的python-python手机版
  5. React的组件中的传值,及context上下文的使用
  6. php论坛怎么架设,论坛架设有诀窍 phpWind配置技巧三则
  7. mybatis环境搭建步骤(含配置文件代码)
  8. 信息学奥赛一本通(1127:图像旋转)
  9. Jmock-使用ClassImposteriser扩展mock class对象
  10. Android 系统(49)---Android获取窗口可视区域大小: getWindowVisibleDisplayFrame()
  11. easyplayerpro 使用说明_H265网页播放器EasyPlayerPro-Win如何通过配置文件实现自动播放等功能?...
  12. BZOJ 2152 Luogu 2634——聪聪可可
  13. NeurIPS 2019:进入NLP的黄金时代
  14. 原型与继承学习笔记3
  15. cs61a 2018spr hw05 的一个题目
  16. 文件上传利器SWFUpload入门简易教程(转)
  17. 《CSS 揭秘》每章详细读书笔记
  18. 1、多线程原理与实践 《Java高并发核心编程 卷二》读书笔记
  19. 列表页进入详情页再返回列表页时,显示默认第一页的bug修复
  20. OpenHarmony HDF LED驱动开发 基于小熊派Micro

热门文章

  1. I love you not because of who you are, but because of who I am when I am with you.
  2. 失业参加聚会_谁被邀请参加聚会?
  3. FreeRTOS学习记录(四):任务、任务切换(难点)
  4. 游戏分类&&游戏开发常用术语
  5. 蜂鸣器的结构原理及制作
  6. linux pwm控制蜂鸣器 滴滴_第七章----pwm蜂鸣器
  7. 对JSON中的key进行驼峰和下划线格式的相互转换
  8. python warning
  9. r55600h和i79750h哪个好
  10. htc 8x android,HTC 8X三款手机曝光:相机是重点 不支持SD卡