You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter升级RevenueCat后iOS调用Purchases.getOfferings()挂起

问题属性说明

这是purchases_flutter 3.x版本适配iOS 15+的已知问题,和你将Purchases.identify替换为Purchases.logIn的操作无直接关联。

getOfferings无返回的核心原因
  • 你当前使用的purchases_flutter: ^3.0.0底层依赖的iOS原生RevenueCat SDK存在缺陷:iOS 15 + XCode 13的组合下,SKProductsRequest请求返回304缓存状态时,回调线程会出现死锁,导致Dart层的Future永远得不到完成通知,最终表现为方法调用挂起。
  • M1芯片的Mac编译iOS真机包时,StoreKit框架的静态链接逻辑会额外提升该线程冲突的触发概率,这也是Android端运行正常、仅iOS端出问题的原因。
修复方案

永久修复

直接将pubspec.yaml中的purchases_flutter依赖版本升级到^3.10.0,该版本是3.x分支的稳定补丁版,官方已经专门修复了iOS 15下SKProductsRequest的死锁问题,不需要修改现有业务逻辑即可解决挂起问题。

临时应急方案

如果暂时不能升级依赖,可以给getOfferings调用添加主动超时逻辑,避免应用启动直接卡住:

import 'dart:async';

// 调用处添加超时
Offerings? rcOfferings;
try {
  rcOfferings = await Purchases.getOfferings().timeout(const Duration(seconds: 8));
} on TimeoutException catch (_) {
  // 超时后走降级逻辑,比如隐藏付费入口、延后到次页再请求
  rcOfferings = null;
}

额外验证操作

如果升级后仍有异常,按以下步骤清理缓存重新编译即可:

  • 项目根目录执行flutter clean
  • 删除ios文件夹下的Pods目录和Podfile.lock文件
  • 终端进入ios目录,M1芯片Mac执行arch -x86_64 pod install --repo-update,Intel芯片Mac直接执行pod install --repo-update
  • 重启XCode后重新运行到真机测试

内容的提问来源于stack exchange,提问作者edn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:15:03