Flutter Glassfy订阅者识别异常:已订阅仍显示免费计划
问题解决:订阅后重启应用显示免费计划
核心原因
应用启动时未主动同步用户的订阅状态,导致GlassfyProvider中的isPremium未被正确更新为已订阅状态。
解决方案
1. 启动时同步订阅状态
在页面初始化阶段调用Glassfy同步接口,拉取最新订阅状态并更新Provider:
@override void initState() { super.initState(); _syncSubscriptionStatus(); } Future<void> _syncSubscriptionStatus() async { try { // 同步应用商店购买记录,确保Glassfy获取最新状态 await Glassfy.syncPurchases(); // 获取用户当前的权限列表 final entitlements = await Glassfy.entitlements(); // 根据Glassfy控制台配置的权限ID判断是否为付费用户 final isPremium = entitlements.any( (ent) => ent.identifier == "你的付费权限ID" // 替换为实际权限ID ); // 更新Provider状态 context.read<GlassfyProvider>().updatePremiumStatus(isPremium); } catch (e) { debugPrint("同步订阅状态失败: $e"); } }
2. 完善GlassfyProvider实现
确保Provider能正确更新状态并通知UI刷新:
class GlassfyProvider extends ChangeNotifier { bool _isPremium = false; bool get isPremium => _isPremium; void updatePremiumStatus(bool newStatus) { if (_isPremium != newStatus) { _isPremium = newStatus; notifyListeners(); // 触发UI重新渲染 } } }
3. 验证权限配置
确认Glassfy控制台中,你的订阅产品已关联正确的权限(Entitlement),且代码中使用的权限ID与控制台配置一致。
额外提示
- 跨设备恢复订阅时,同样需要调用
syncPurchases同步应用商店记录 - 可在用户点击「Plans」按钮时再次触发同步,确保状态实时更新
内容的提问来源于stack exchange,提问作者Burak Özkan
相关产品推荐
相关产品推荐

