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

手动启动应用时SKStoreReviewController的requestReview方法不生效问题

评分弹窗仅调试可显示、正式启动不显示的原因及修复方案

核心原因1:SKStoreReviewController的环境规则限制

  • 苹果官方对生产环境的评分弹窗做了严格限制:单个应用对同一名用户1年内最多只能弹出3次评分请求,仅Xcode调试模式下不受该规则限制,所以调试时每次调用都能正常弹出。
  • 如果你安装到iPad上的是Release签名包(包括Ad Hoc、TestFlight、正式版IPA),都会触发该规则,若之前已经触发过3次弹窗,当年内不会再展示。另外TestFlight环境下该API默认不会弹出任何弹窗。

核心原因2:冷启动时场景状态获取时序问题

你在viewDidAppear中通过connectedScenes筛选活跃状态场景的逻辑,在应用冷启动刚完成的瞬间很容易失效:冷启动时场景状态还处于从foregroundInactive到foregroundActive的过渡阶段,你的筛选条件会过滤掉过渡状态的场景,导致拿不到可用的WindowScene,请求逻辑不执行。
Xcode调试时因为进程附加的时序差异,刚好能命中foregroundActive状态,所以可以正常弹出。

验证方案:将评分请求逻辑延迟1秒执行,测试冷启动是否能正常弹出:

DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
    // 原有评分请求逻辑
}

核心原因3:iPad场景获取逻辑适配问题

iPad支持多窗口多场景,你直接取全局connectedScenes第一个符合条件的场景,很容易取到非当前交互窗口的场景,建议从当前控制器所属的窗口获取对应场景,修复后的代码如下:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if #available(iOS 14.0, *) {
        guard let currentScene = view.window?.windowScene else { return }
        SKStoreReviewController.requestReview(in: currentScene)
    } else if #available(iOS 10.3, *) {
        SKStoreReviewController.requestReview()
    }
}

其他可能原因

如果用户在iPad系统「设置」-「App Store」中关闭了「App内评分及评论」选项,所有应用的评分弹窗都不会触发展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:54:03