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

应用启动指定次数后StoreKit评分弹窗不显示问题排查

应用启动指定次数后StoreKit评分弹窗不显示的问题

问题描述

我希望在应用启动指定次数后请求用户评分,但在launchNumber == 2时,StoreKit评分弹窗并未显示。不过if let scene =这段代码在按钮点击场景下可以正常工作,相关代码如下:

import SwiftUI
import StoreKit

@main
struct ExampleApp: App {
    @AppStorage("launchNumber") var launchNumber: Int = 0

    var body: some Scene {
        WindowGroup {
            ContentView()
                .onAppear { review() }
        }
    }

    func review() {
        launchNumber += 1
        // print(launchNumber)
        guard launchNumber == 2 else { return }
        if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
            SKStoreReviewController.requestReview(in: scene)
        }
    }
}

原因分析及解决办法

  • 苹果官方调用频率限制:SKStoreReviewController.requestReview有严格的调用限制,用户每年最多只会看到3次评分弹窗。如果之前已经触发过该请求(哪怕是测试阶段),即使代码逻辑正确,弹窗也不会再显示。
  • onAppear触发时机过早:ContentView的onAppear可能在应用场景还未完全进入foregroundActive状态时就执行了,此时获取的场景状态不符合要求,导致评分请求失败。可以改用监听ScenePhase的方式,在应用进入活跃状态后再触发请求。
  • 测试环境限制:模拟器上测试时,评分弹窗的显示不稳定,建议使用真实设备测试;另外TestFlight版本和正式版的弹窗触发逻辑有差异,正式版的限制更严格。
  • 计数逻辑验证:取消注释print(launchNumber),确认launchNumber在第二次启动时确实等于2,排除@AppStorage存储异常导致的计数错误。

优化代码示例

改用ScenePhase监听应用状态,确保在场景完全活跃后触发评分请求:

import SwiftUI
import StoreKit

@main
struct ExampleApp: App {
    @AppStorage("launchNumber") var launchNumber: Int = 0
    @Environment(\.scenePhase) private var scenePhase

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                review()
            }
        }
    }

    func review() {
        launchNumber += 1
        print(launchNumber)
        guard launchNumber == 2 else { return }
        if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
            SKStoreReviewController.requestReview(in: scene)
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:48:34