View in English

  • 打开菜单 关闭菜单
  • Apple Developer
搜索
关闭搜索
  • Apple Developer
  • 新闻
  • 探索
  • 设计
  • 开发
  • 分发
  • 支持
  • 账户
在“”范围内搜索。

快捷链接

5 快捷链接

视频

打开菜单 关闭菜单
  • 专题
  • 相关主题
  • 所有视频
  • 关于

更多视频

大多数浏览器和
Developer App 均支持流媒体播放。

  • 简介
  • 转写文稿
  • 代码
  • Screen Time API 的新功能

    了解如何构建能够帮助用户管理他们与设备之间的关系,同时保护用户隐私的 App。我们将带您了解 Screen Time API,与您分享核心限制和设备活动报告等功能的使用方法,在提供一流体验的同时让设备的所有者、家长和监护人可以采取可衡量的控制措施。

    资源

    • DeviceActivity
    • FamilyControls
    • ManagedSettings
      • 高清视频
      • 标清视频
  • 搜索此视频…

    ♪ ♪

    MaryAshley Etefia: 大家好 我是 MaryAshley Etefia 我是 Screen Time 的 软件工程师 新冠病毒给我们行业带来了 很大的压力 我们需要应对数字健康 和生产率资源方面急剧增长的需求 新冠病毒增强了我们社会 对平衡的需求 成功将大家的能力用于管理 个人空间 以供测试 去年 我们 推出了 Screen Time API 让您可以构建新的 App 帮助用户 管理孩子的设备时间 我们很高兴地看到 大家在使用我们的产品时 都有许多极具创意和成效的方法 我也很激动看到大家与我们的 企业文化所说的那样 非同凡响 我们也非常感激过去一年来 收到的所有反馈 在为大家介绍 iOS 16 中 ScreenTime API 的更新前 我先回顾下 iOS 15 发布会上的 一些亮点 去年的 Screen Time API 推出了三个全新框架 Family Controls, Managed Settings 和 Device Activity 在 iOS 15 中 这些框架为 您 App 的家长控制模块 带来了新的可能 我们先来快速浏览下 这三个框架 激活大家的记忆 Family Controls 从根本上说 就是一道闸口 能授权访问 Screen Time API 该框架让您实现避免 家长控制 App 被移除 也可通过不透明的token 来识别 App 和网站 从而保护用户隐私 有了 ManagedSettings 您的 App 可以采取限制来 过滤网络流量 屏蔽活动 这一点与 Screen Time 的功能类似 但根据您 App 的品牌 和功能进行自定义 Device Activity 框架让您可以 在时间窗口的开始和结束时 以及在 App 或网站的使用 超过限值时 执行代码 这三个框架在 iOS 16 中 都有激动人心的更新 这些更新不仅仅让我们的 API 使用更简单 也能提高用户的使用体验 我用 demo App Worklog 来为大家详细解释下 Worklog 可通过在 某个使用指标达到前 限值指定 App 的使用 从而鼓励新专业人员培养好习惯 我为大家演示下 这部 iPhone 的主人 Aniyah 是如何用 iOS 16 的 ScreenTime API 来用这些限制约束自己的 首先是 Family Controls 如果您还有印象的话 iOS 15 中 Family Controls 只能 通过 iCloud 认证 来授权儿童设备 我们很高兴地告诉您 在 iOS 16 中 Family Controls 现在可以 在各自的设备上授权独立用户了 这个新的授权方式意味着 Screen Time API 可以 用于搭建更多功能的 App 而不仅是家长控制 和当前的家长控制授权不同 每个设备的个人授权可以 任意数量的 App 上使用 同时 由于个人授权并不是 为了家长控制这一使用情况搭建的 无需隐式限制 iCloud 登出 或删除 App 我们来看看这个新的授权 如何使用 您启动 App 时第一步 就是为 FamilyControls 请求授权 我用的是共享授权中心 在 Worklog 首次启动时 就要发起请求 这个请求可以更新授权状态 或弹出错误 由于 App 之前没有在 这部 iPhone 上用过 requestAuthorization 会弹出预警 询问 Aniyah 的许可 点击 Allow 可以提示用户 用 面容 ID 触控 ID 或设备密码授权以继续 用户成功授权后 会再次调用 requestAuthorization 但不会提示预警 而是后台成功运行 App 获得 Family Controls 的 授权后 App 的设置中会增加 两个开关 如果 App 有 Screen Time 访问列表 那就在 Screen Time 下 另一个在每个 App 的设置中 标记为 Screen Time Restrictions 家长和个人用户可以 在 Family Controls 中 用这几个开关 解除 App 的授权 如您所见 使用新的个人授权 和使用家长控制授权一样简单 我们对异步使用都做了 很不错的改进 现在 我们来看下 Managed Settings 的更新 Managed Settings 更新后 开发者使用更简便 尤其是使用 Managed Settings Store 时 可能有些开发者还不熟悉 Managed Settings Store 是一个数据储存区 可以将设置 应用到当前用户或设备 在 iOS 15 您每个步骤只能有 一个 Managed Settings Store 您的 App 和设备活动扩展 也要有不同的 Managed Settings Stores 如果根据设备活动来改变设置 就比较困难 现在 在 iOS 16 中 每个步骤您可以创建 高达 50 个Managed Settings Stores 每个都有自己专有的命名 这些命名储存也可自动在 您的 App 和所有 App 扩展中共享 同时 您现在也可以一次性 移除指定命名储存区的所有设置 我为大家演示下 Worklog 是 如何使用命名储存区的 Worklog 首次启动时 Aniyah 的设备已经 成功获得授权 我们创建了 Gaming Managed Settings Store 该储存区包含我们的游戏限制 比如在 Worklog 中 包括屏蔽所有游戏网站 Worklog 也有一个储存区 命名为“Social” 可以在 App 首次运行后 屏蔽所有社交媒体 App 和网站 然而 使用 Worklog 时 Aniyah 可以点击 Allow for Evenings 按钮 创建一个 Device Activity Schedule 允许下午 5:00 至 晚上 8:00 期间 使用社交媒体平台 到了下午 5:00 我们的 Device Activity Monitor 就会解除对应命名储存区的限制 当时间窗口于晚上 8:00 结束后 会重新在 Aniyah 的设备上 对社交媒体 App 和网站 重新应用限制 开发者可能会感到疑惑 “我们的 Gaming store 不是限制了所有游戏网站吗” “如果清除 Social store 中的 所有设置” “不会和 Gaming store 的 设置相冲突吗” 答案是否定的 通常优先应用最严格的限制 因此 游戏网站 在 Aniyah 的设备中 还是会保留限制 我们觉得这些新的 命名储存区很强大 会让您用 Managed Settings 开发 App 更简便 但这还没有结束 我们还为 Device Activity 框架 添加了非常激动人心的功能 在 iOS 15 中 Device Activity 让您的 App 可以响应时间窗口的 开始和结束 以及 App 和网站的使用限值 在 iOS 16 中 Device Activity 有一个新的报告服务 让您的 App 可以用 SwiftUI 创建完全自定义的使用报告 使用数据可提供至新的扩展接口 您可以自定义 向客户展示哪些数据 以及如何在屏幕上渲染 这些设备活动报告让您可以 完全自定义用户体验 同时为终端用户提供完整隐私 在 Worklog 中 您可以看到我们 建立了 Device Activity Report Context 和 Device Activity Filter 您可以 将 Device Activity Report Context 当成自定义类型 可提示您的报告 根据 Device Activity 数据 绘制哪种视图 您可以通过指定 Device Activity Filter 来自定义 任意报告内容的时间窗口 然后 我们可以 在 Device Activity Report Scene 中 设置设备活动报告内容的定义 从而提示场景要展示什么内容 我们的内容确定了 自定义配置 PieChartView.Configuration 以及最终报告的 SwiftUI 视图 然后在 makeConfiguration 中 我们映射到 Aniyah 的 Device Activity Data 以补充饼图视图配置 这个框架在抓取到 新的使用数据时 会唤醒 makeConfiguration 这样您无需自己唤醒 这里您可以 看到 PieChartView.Configuration 是如何提供 Aniyah 的 设备活动数据视图 作为我们饼图视图的 视图模型 最后 我们可以通过将其定义到 Device Activity Report 扩展的主体中 渲染自定义 SwiftUI 报告 您自定义设备活动报告 有许多神奇的方法 我们为 Worklog 创建的 饼图报告只是其中之一 其中也包括我们对 iOS 16 Screen Time API 更新的简报 如您所见 Screen Time API 可持续 在安全且能保证隐私的方式下 与首次启动一样支持 如核心限制 和设备活动监控的功能 我们来回顾下 独立用户现在可以 用 Family Controls 授权各设备的多个第三方 App Managed Settings Stores 现在可以 本地共享 App 和 App 扩展之间的设置 因此 您现在可以在 App 中 管理多个命名储存区 最后 Device Activity 框架 推出了全新的隐私保护 UI 可以向用户展示使用数据 同时也支持自定义 我们相信这些增强和额外功能 能让更多用户使用您的 App 感谢大家为我们更新提供的灵感 也感谢大家未来对数字健康 和生产性空间所做的贡献 我们迫不及待看您如何 以创新 激动人心的方式使用 全新的 Screen Time API 了 我们欢迎大家的反馈 同时也会持续改进这一技术 让其对大家和我们的用户都适用 谢谢

    • 3:12 - Request aAhuthorization

      // APP: Request Authorization
      
      import SwiftUI
      import FamilyControls
      
      @main
      struct Worklog: App {
          let center = AuthorizationCenter.shared
          var body: some Scene {
              WindowGroup {
                  VStack {…}
                      .onAppear {
                          Task {
                              do {
                                  try await center.requestAuthorization(for: .individual)
                              } catch {
                                  print("Failed to enroll Aniyah with error: \(error)")
                              }
                          }
                      }
              }
          }
    • 5:13 - Managed settings store

      // MONITOR EXTENSION: Handle Social category at start/end of interval
      
      import DeviceActivity
      import ManagedSettings
      
      class WorklogMonitor: DeviceActivityMonitor {
          let database = BarkDatabase()
          override func intervalDidStart(for activity: DeviceActivityName) {
              super.intervalDidStart(for: activity)
              let socialStore = ManagedSettingsStore(named: .social)
              socialStore.clearAllSettings()
          }
          
          override func intervalDidEnd(for activity: DeviceActivityName) {
              super.intervalDidEnd(for: activity)
              let socialStore = ManagedSettingsStore(named: .social)
              let socialCategory = database.socialCategoryToken
              socialStore.shield.applicationCategories = .specific([socialCategory])
              socialStore.shield.webDomainCategories = .specific([socialCategory])
          }
      }
    • 7:02 - Device activity report and filter

      // APP: Top-level view
      
      import SwiftUI
      import DeviceActivity
      
      extension DeviceActivityReport.Context {
          static let pieChart = Self(“Pie Chart")
      }
      
      @main
      struct Worklog: App {
          private let thisWeek = DateInterval(...)
          @State private var context: DeviceActivityReport.Context = .pieChart
          @State private var filter = DeviceActivityFilter(segment: .daily(during: thisWeek))
      
          var body: some Scene {
              WindowGroup {
                  GeometryReader { geometry in
                      VStack(alignment: .leading) {
                         DeviceActivityReport(context: context, filter: filter)
                              .frame(height: geometry.size.height * 0.75)
                          
             
          }
      }
    • 7:24 - Device activity report

      // REPORT EXTENSION: Configure Custom Device Activity Report
      
      import SwiftUI
      import DeviceActivity
      
      struct PieChartReport: DeviceActivityReportScene {
          let context: DeviceActivityReport.Context = .pieChart
          let content: (PieChartView.Configuration) -> PieChartView
          
          func makeConfiguration(representing data: [DeviceActivityData]) 
              -> PieChartView.Configuration {
              var totalUsageByCategory: [ActivityCategory:TimeInterval]
              totalUsageByCategory = data.map(…)
              
              return PieChartView.Configuration(totalUsageByCategory: totalUsageByCategory)
          }
      }
    • 7:55 - Configure Custom Device Activity Report

      // REPORT EXTENSION: Configure Custom Device Activity Report
      
      import SwiftUI
      import DeviceActivity
      
      struct PieChartView: View {
          struct Configuration {
              let totalUsageByCategory: [ActivityCategory:TimeInterval]
          }
          
          let configuration: Configuration
          
          var body: some View {
              // A complex view that renders a bar graph based on Aniyah’s usage per category.
              PieChart(usage: configuration.totalUsageByCategory)
          }
      }
    • 8:05 - Present custom report

      // REPORT EXTENSION: Draw Custom Device Activity Report
      
      import SwiftUI
      import DeviceActivity
      
      @main
      struct WorklogReportExtension: DeviceActivityReportExtension {
          var body: some DeviceActivityReportScene {
              PieChartReport { configuration in
                  PieChartView(configuration: configuration)
              }
          }
      }

Developer Footer

  • 视频
  • WWDC22
  • Screen Time API 的新功能
  • 打开菜单 关闭菜单
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    打开菜单 关闭菜单
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    打开菜单 关闭菜单
    • 辅助功能
    • 配件
    • App 扩展
    • App Store
    • 音频与视频 (英文)
    • 增强现实
    • 设计
    • 分发
    • 教育
    • 字体 (英文)
    • 游戏
    • 健康与健身
    • App 内购买项目
    • 本地化
    • 地图与位置
    • 机器学习
    • 开源资源 (英文)
    • 安全性
    • Safari 浏览器与网页 (英文)
    打开菜单 关闭菜单
    • 完整文档 (英文)
    • 部分主题文档 (简体中文)
    • 教程
    • 下载 (英文)
    • 论坛 (英文)
    • 视频
    打开菜单 关闭菜单
    • 支持文档
    • 联系我们
    • 错误报告
    • 系统状态 (英文)
    打开菜单 关闭菜单
    • Apple 开发者
    • App Store Connect
    • 证书、标识符和描述文件 (英文)
    • 反馈助理
    打开菜单 关闭菜单
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program (英文)
    • News Partner Program (英文)
    • Video Partner Program (英文)
    • 安全赏金计划 (英文)
    • Security Research Device Program (英文)
    打开菜单 关闭菜单
    • 与 Apple 会面交流
    • Apple Developer Center
    • App Store 大奖 (英文)
    • Apple 设计大奖
    • Apple Developer Academies (英文)
    • WWDC
    获取 Apple Developer App。
    版权所有 © 2025 Apple Inc. 保留所有权利。
    使用条款 隐私政策 协议和准则