都2022年了,我们来看看iOS StoreKit 2 吧

简介: 都2022年了,我们来看看iOS StoreKit 2 吧

前言

不知道大家有没有了解过苹果的内购,也就是我们说的苹果支付 IAP,如果大家的 App 有使用 IAP 功能,那么可能会遇到用户反馈苹果充值成功,但是服务没有到账的情况,用户一般会提供这样的苹果收据:

image.png

用户反馈时提供的苹果收据中,有一个字段中 ORDER ID,苹果叫 Invoice order ID(发票订单号),与我们开发者从 App 内获取到的 receipt 收据解析后,并没有 ORDER ID 字段!!!所以,我们无法定位和联系这个用户提供的发票与我们后台的订单号,从而无法给用户正常补发服务,开发者也是很无奈!但是最近苹果开发了一个新的功能,也就是我们的StoreKit 2,它让我们苹果支付可以变得更好,并且也可以用他们新的验证票据的方式哦

StoreKit 2 主要更新

  • 一套新的基于 Swift 语言特性
  • 更新收据和交易(数据格式和字段变更)
  • 更多订阅类型的接口
  • 相同的 StoreKit 框架

StoreKit 2 for Swift only!没错!仅适用于 SwiftStoreKit 2 利用 Swift的最新特性,包括 Swift并发 等新语言接口,简化在App中获取产品信息、商品产品、处理交易以及管理对内容和订阅的访问。并且,StoreKit 2 只支持 iOS 15+ 。

Powerful new APIs

image.png

StoreKit 2 提供了以上更新的类(方法)来轻松访问 IAP 接口,可以理解为增强的版本,

  • Products:有关在 App Store Connect 中配置的内购品项的信息
  • Purchases:更新购买品项接口的可选参数,可绑定用户ID
  • Transaction info:更新交易信息的内容格式
  • Transaction history:提供查询交易历史记录的接口
  • Subscription status:提供订阅品项的状态查询接口

image.png

除了原有的请示品项信息外,购买时,增加了一些可选参数 Purchase opthons

image.png

除了购买数据、促销优惠 外,最重要的是新字段:App account token

  • 开发者创建 App account token
  • 关联到 App 里的用户账号
  • App account token 使用 UUID 格式
  • 在交易(Transcation)订单中永久保存

这个 `App account token` 是给开发者将用户的 ID 绑定到交易(Transcation)中,也就是把苹果的交易订单数据与用户信息进行映射,可以起到防止充值掉单的问题啊~

JWS

image.png

签名的交易(Transcation)信息:

  • 每笔交易一个对象
  • 签名的交易信息,数据格式使用 JWS(JSON Web Signature)
  • 使用原生接口读取数据

image.png

Manage in-app purchases on your server 里讲解使用 JWS 数据格式的原因:

  • 1、增强安全性
  • 2、更容易解码
  • 3、不用连接苹果服务器验证,开发者本地就可以单独验单!

JWS的主要目的是保证了数据在传输过程中不被修改,验证数据的完整性。但由于仅采用Base64对消息内容编码,因此不保证数据的不可泄露性。所以不适合用于传输敏感数据

image.png

JWS 格式的 transaction info 格式:

Base64() + "." + Base64(payload) + "." + sign( Base64(header) + "." + Base64(payload) )

这个 header 与 payload 通过 header 中声明的 alg 加密方式,使用密钥 secret 进行加密,生成签名。然后逆向构造过程,decode出 JWT 的三个部分:

  1. 头部(Header)
  2. 载荷(PayLoad)
  3. 签名(signature)

developer.apple.com/videos/play… demo

怎么解密呢

JWS x5c头参数包含用于签名和验证JWS的整个证书链。不需要获取任何其他证书或密钥。

RFC指定与用于签署JWS的公钥对应的证书必须是第一个证书。

您可以从此证书中提取公钥,并使用它来验证JWS签名。在这个答案中有一些指导

StoreKit2的一个重大改进是不再需要使用服务器来安全地验证应用内购买交易。

在StuteKIT2上的苹果WWDC 2021会话描述了JWS的内容,还展示了如何在设备上验证JWS实际上是为该设备生成的。

但是,如果您确实希望在服务器上验证事务,该怎么办?由于x5c声明包含证书链,攻击者可以使用自己的证书对伪造的JWS进行签名,并将该证书包含在x5c声明中。

答案是让你的应用程序将原始交易ID以及你需要的任何其他信息(如用户的帐户标识符)发送到服务器。然后,您的服务器可以从Apple请求相应的JWS,并验证返回的JWS的签名。

由于JWS是通过您的服务器代码从Apple获取的,因此可以确保它不是伪造的JWS。

如果可能,在您的购买请求中包含一个appAcCountToken,并根据用户对服务器的身份验证来确定预期的令牌值,或者(不太有效)让您的应用在提供原始交易ID时提供令牌。然后,您可以验证JWS中的令牌值是否与预期值匹配。这使得攻击者更难重播其他购买事件。

transactions history

image.png

提供了三个新的交易(Transcation)相关的 API:

  1. All transactions:全部的购买交易订单
  2. Latest transactions:最新的购买交易订单。(分为订阅品项和除订阅品项外的所有类型二种)
  3. Current entitlements:当前用户有购买的权限。(全部的订阅品项、和非消耗品项)

获取用户的交易历史记录,包括他们在你的 App 中的所有应用内购买。 也是只需要参数一个:originalTransactionId,注意,只需要是用户的任意一个交易的 originalTransactionId 就可以啦。这个大家一看就明白了,就不展开了。详细文档:Get Transaction History

image.png

新的验签接口

App Store Server 接口标准:

  • JWT 认证
  • JWS 交易内容格式
  • Json 请求和响应
  • 基于 originalTransactionId 标识参数

image.png

所有的 App Store Server API 接口都必须使用 JWT 认证,关于验证规则和流程,请查看文档:Generating Tokens for API Requests

image.png

结束

其实就是给大家介绍下 StoreKit 1和 StoreKit 2,对于苹果内购的一些更新吧!

image.png

验证苹果商店服务器通知 responseBodyV2

Java 从 x5c 中获取公钥

iOS StoreKit 2 新特性解析

相关文章
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
98 1
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
1月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
61 1
|
2月前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
3天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第31天】在这篇文章中,我们将一起踏上iOS开发的旅程。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。我们将从基础开始,逐步深入到更高级的技术和概念。让我们一起探索iOS开发的世界吧!
|
6天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第28天】在这篇技术性文章中,我们将一起踏上一段探索iOS开发的旅程。无论你是刚入门的新手,还是希望提升技能的开发者,这篇文章都将为你提供宝贵的指导和灵感。我们将从基础概念开始,逐步深入到高级主题,如设计模式、性能优化等。通过阅读这篇文章,你将获得一个清晰的学习路径,帮助你在iOS开发领域不断成长。
31 2
|
12天前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。