Flutter in_app_purchase 内购在 iOS 上的应用总结

41 天前
 burden7

前一段时间在 Flutter 应用接入 apple 内购时遇到了一些问题,目前搞清楚了大概,在这里简单总结记录下,希望帮助其他 V 友少陷入点困惑,以下总结可能仍有错误的地方,若有发现,欢迎指出。

Apple 的内购机制存在两个版本:StoreKit V1StoreKit V2

收据 & server api 区别

这两个版本对于我目前可知的影响是,用户购买之后代码中拿到的待验证收据信息的格式不同。如果是 V1 版本,则返回的是 base64 字符串,请求 server api ,获取到全部交易信息如果是 V2 版本,返回的是 JWT 格式(可以解析获取到原始 payload ,里面会有交易信息),请求 server api 获取到历史信息或本次交易信息;

关于请求后获取到的交易信息,V1 V2 也有不同:

V1 版本:调用 verify 接口,返回的交易信息是所有交易信息,包含所有时间段内的订阅、一次性购买信息

V2 版本:若调用inApps/v1/verifyTransaction可获得本次的交易信息;若调用inApps/v2/history(需要传入原始交易 id - originalTransactionId ),则根据这个原始 id 获得所有续订、升级、退订记录,另外这是一个分页接口,你可以传入 revision 游标参数来获取分页信息

用户在你的 App 中订阅后,到了下一个周期内你如何判断用户是否已续期

此部分也有不同的解决方案:

  1. 你可以在 APP 每次启动时或你的服务端每天轮询一次,去使用以上的接口去获取实时的 expiresDate (过期时间)
  2. 使用 App Store Server Notifications ( apple 推荐),你可以在 appstore connect 中设置一个你服务端的 hook 接口,当出现了续订、退订、退款等情况时,你的接口会收到一个 POST 请求,里面是一个 json 字符串,其中包含一个 JWT 字符串,你可以通过解析然后获得本次通知的交易信息
781 次点击
所在节点    Flutter
1 条回复
justtokankan
31 天前
直接支持 iOS15 storekit2 是最简单的,对账都是端对端

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1150134

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX