IAP 促销优惠(promotional offer)后端接入指南
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)后端接入指南相关推荐
- IAP 自动续费后端接入指南
IAP 自动续费后端接入指南 前言 使用场景 接入流程 1. 后台配置 2. 方案选择 三种方案的对比 最终方案 3.关键点 3.1 续费表扣费状态的设计 3.2 如何判断用户续费成功? 3.3 如何 ...
- 后端开发面试自我介绍_一定是最适合你的后端面试指南
原标题:一定是最适合你的后端面试指南 本文转自公众号:Java面试通关手册 友情提示:阅读+独立思考的方式学习本文效果最佳.本文干货较多,如果大家觉得不错请转发给可能需要本文的朋友哦!最后,不要忘记给 ...
- 写给刚入门的前端工程师的前后端交互指南
转自原文 写给刚入门的前端工程师的前后端交互指南 作为刚接触前端的不久的童鞋,大家都会兴奋于CSS和JS所带来漂亮界面,然而,前端工程师除了UI重构外,还有非常重要的职责在正确的区域渲染出服务端的数据 ...
- C#微信公众号开发系列教程二(新手接入指南)
此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...
- Apollo使用指南(二)公共组件接入指南
2.1 公共组件和普通应用的区别 公共组件是指那些发布给其它应用使用的客户端代码,比如CAT客户端.Hermes Producer客户端等. 虽然这类组件是由其他团队开发.维护,但是运行时是在业务实际 ...
- Apollo使用指南(一)普通应用接入指南
写在前面: 最近在学习apollo方面的知识,apollo目前托管在GitHub上,相关文档也主要在GitHub上.出于学习的需要,也因为最近众所周知的旧问题和新阻碍,为了能更方便和稳定的访问到这些内 ...
- RePlugin插件接入指南
RePlugin插件接入指南 只需两步,就能让您的App变成"RePlugin插件": 有关"混淆" RePlugin的AAR自带Proguard文件,您无需关 ...
- RePlugin 主程序接入指南
RePlugin 主程序接入指南 只需三步,就能让您的"主程序"接入RePlugin: 注意:目前有开发同学反馈,开启Instant Run时可能会出现运行时异常情况,请临时关掉此 ...
- 【微信服务号开发】01.接入指南
前言 当作为小白,来开发微信的时候,只依据官方文档来开发是很痛苦的,怎么配置,怎么编写代码文件,怎么让映射到外网访问,问题很多,比较痛苦. 下面内容来解决这些痛点,有不懂的问题,可以在下面留言评论哦. ...
最新文章
- 关于Spark NLP学习,你需要掌握的LightPipeline(附代码)| CSDN博文精选
- 深入认识二进制序列化--记一次生产事故的思考
- android开发字体样式,Android开发中修改程序字体的样式
- 手机版的python-python手机版
- React的组件中的传值,及context上下文的使用
- php论坛怎么架设,论坛架设有诀窍 phpWind配置技巧三则
- mybatis环境搭建步骤(含配置文件代码)
- 信息学奥赛一本通(1127:图像旋转)
- Jmock-使用ClassImposteriser扩展mock class对象
- Android 系统(49)---Android获取窗口可视区域大小: getWindowVisibleDisplayFrame()
- easyplayerpro 使用说明_H265网页播放器EasyPlayerPro-Win如何通过配置文件实现自动播放等功能?...
- BZOJ 2152 Luogu 2634——聪聪可可
- NeurIPS 2019:进入NLP的黄金时代
- 原型与继承学习笔记3
- cs61a 2018spr hw05 的一个题目
- 文件上传利器SWFUpload入门简易教程(转)
- 《CSS 揭秘》每章详细读书笔记
- 1、多线程原理与实践 《Java高并发核心编程 卷二》读书笔记
- 列表页进入详情页再返回列表页时,显示默认第一页的bug修复
- OpenHarmony HDF LED驱动开发 基于小熊派Micro
热门文章
- I love you not because of who you are, but because of who I am when I am with you.
- 失业参加聚会_谁被邀请参加聚会?
- FreeRTOS学习记录(四):任务、任务切换(难点)
- 游戏分类&&游戏开发常用术语
- 蜂鸣器的结构原理及制作
- linux pwm控制蜂鸣器 滴滴_第七章----pwm蜂鸣器
- 对JSON中的key进行驼峰和下划线格式的相互转换
- python warning
- r55600h和i79750h哪个好
- htc 8x android,HTC 8X三款手机曝光:相机是重点 不支持SD卡