大多数浏览器和
Developer App 均支持流媒体播放。
-
Screen Time API 的新功能
了解如何构建能够帮助用户管理他们与设备之间的关系,同时保护用户隐私的 App。我们将带您了解 Screen Time API,与您分享核心限制和设备活动报告等功能的使用方法,在提供一流体验的同时让设备的所有者、家长和监护人可以采取可衡量的控制措施。
资源
-
下载
♪ ♪
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) } } }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。