V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
burden7
V2EX  ›  Flutter

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

  •  
  •   burden7 · 27 天前 · 628 次点击

    前一段时间在 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 字符串,你可以通过解析然后获得本次通知的交易信息
    justtokankan
        1
    justtokankan  
       17 天前
    直接支持 iOS15 storekit2 是最简单的,对账都是端对端
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2636 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 15:14 · PVG 23:14 · LAX 08:14 · JFK 11:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.