都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 新特性解析

相关文章
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
18天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
109 66
|
4天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
28天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
2月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!