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

如何在iOS中使用Screen Time API实现应用时长统计与拦截功能?

iOS实现应用使用时长监控与拦截的可行方案

要实现你需要的功能,唯一合法且长期可行的方案是基于Apple官方的Screen Time框架(iOS 12+),第三方库大多因为API适配问题过时或不符合审核要求,直接使用原生框架是最优解。以下是具体实现步骤:

一、获取已安装应用及使用时长

  1. 申请Screen Time权限
    首先必须获取用户授权,调用系统API发起权限请求:

    import ScreenTime
    
    STAuthorizationCenter.shared.requestAuthorization { granted, error in
        if granted {
            // 权限通过,后续可获取使用数据
        } else {
            // 权限被拒,需引导用户到系统设置开启
        }
    }
    

    同时要在Info.plist中添加权限描述NSFamilyUsageDescription,说明应用访问Screen Time数据的用途(比如"用于监控应用使用时长,帮助你合理管理屏幕时间"),否则用户看不到授权弹窗。

  2. 获取应用使用时长数据
    通过STUsageManager获取指定时间范围的使用报表,解析后得到每个应用的使用时长:

    let calendar = Calendar.current
    let startOfDay = calendar.startOfDay(for: Date())
    let timeRange = DateInterval(start: startOfDay, end: Date())
    
    STUsageManager.shared.fetchReports(for: .daily, timeRange: timeRange) { reports, error in
        guard let reports = reports else { return }
        for report in reports {
            guard let bundleID = report.bundleIdentifier, let totalSeconds = report.totalUsageTime else { continue }
            // bundleID对应应用唯一标识,totalSeconds是累计使用时长(秒)
            print("应用 \(bundleID) 今日使用时长:\(totalSeconds/3600)小时\((totalSeconds%3600)/60)分钟")
        }
    }
    

    注意:只能获取授权后的使用数据,无法拿到授权前的历史记录。

二、实现应用时长超限拦截

Screen Time框架支持直接配置应用使用限制,达到时长上限后系统会自动拦截应用(用户打开时会显示超时提示,无法进入应用),无需手动拦截:

  1. 创建并添加时长限制规则

    // 目标应用的bundleID,可通过上述使用报表获取
    let targetBundleIDs = ["com.example.targetApp"]
    // 设置每日时长上限为1小时(单位:秒)
    let dailyLimit = STAppLimit(
        bundleIdentifiers: targetBundleIDs,
        category: .any,
        dailyDuration: 3600
    )
    
    STAppLimitManager.shared.add(dailyLimit) { error in
        if let error = error {
            print("添加限制失败:\(error.localizedDescription)")
        } else {
            print("限制规则已生效")
        }
    }
    
  2. 监听限制状态变化
    可通过通知监听限制规则的变更或触发状态:

    NotificationCenter.default.addObserver(
        forName: STAppLimit.didChangeNotification,
        object: nil,
        queue: .main
    ) { notification in
        // 限制规则发生变化,可在此更新本地状态或提示用户
    }
    

关于你遇到的第三方库问题

screen-time-api-ios这类第三方库大概率未适配最新iOS版本的API变更(比如iOS 15+对Screen Time接口的调整),直接依赖官方框架能避免兼容性问题,也更符合App Store审核要求。

关键注意事项

  • 应用功能必须明确为自我管理或家长控制,不能用于监控他人隐私,否则会被App Store拒审。
  • 所有操作必须基于用户主动授权,不能绕过系统权限流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:35:02