大多数浏览器和
Developer App 均支持流媒体播放。
-
认识屏幕使用时间 API
探索屏幕使用时间 API,学习如何构建支持自定义家长控制的 app,这些都要首先考虑隐私保护。学习如何使用核心限制和设备活动监控等关键功能为您的 app 带来安全体验,同时为父母和监护人提供可衡量的控制手段。
资源
相关视频
WWDC21
-
下载
欢迎来到WWDC 我是Screen Time团队的 工程师克里斯多弗司科简 今天在这里跟各位谈谈 新的Screen Time API 自Apple推出iOS的 Screen Time功能以来 已经三年了 这是通过设备来改善 我们客户与家人之间关系的 一大步 过去三年来 Screen Time为iPhone、iPad和Mac 带来了一些很棒的新功能 Screen Time可协助你记录你 和你的家人使用应用程序和 网站的频率 通过设定限制来管理时间 与家人共享这个功能 来查看设备的使用情况 最后 你还可以控管 谁和你的孩子交流互动 我们还听到许多人说 想要利用你们自己 家长控制应用程序中的 其中一些功能 所以我们推出了Screen Time API 该API为你的应用程序带来了 核心屏幕使用时间功能 可以让你为客户创造动态的新体验 首先 这个API会在iOS和 iPadOS 15提供 完全是使用Swift和Swift UI程序代码 可轻松整合到现代Swift应用程序 Screen Time API的设计和开发 遵循三个指导原则 第一 为直接API存取现有限制 提供现代化的设备端框架 第二个指导原则是保护用户隐私 由于Screen Time会处理到 一些非常敏感的个人信息 包括你使用过的应用程序 或造访过的网站 因此Screen Time一直是 非常以隐私为中心 举例来说 你的家人甚至 Apple之外的任何人都无法得知 你造访过哪些网站 或使用了哪些应用程序 针对这个新的API 我们会继续 采用这种保护隐私的作法 在客户的设备之外都没办法 看到他们的使用数据 最后 我们的第三个指导原则是 确保开发人员能够 打造绝佳的全新动态家长控制体验 这三个指导原则带领我们 建立了三个新框架 这绝非偶然 这三个框架一起 构成了Screen Time API 第一个框架是管理设定 管理设定可以让你的应用程序 直接存取Screen Time中 所提供的相同限制 第二个框架是家庭控制 家庭控制推动了我们的隐私政策 最后一个框架是设备活动 设备活动可让你通过为你的应用程序 提供强大的新功能 在不需要启动 应用程序的情况下就能执行程序代码 从而超越Screen Time 我们来更深入介绍这三个框架 先从管理设定开始 应用程序需要一种更好的方式 来限制孩子可以 用他们的设备做什么 并确保 这些限制一直有效 直到父母或监护人解除限制 通过管理设定 可以在应用程序设定许多限制 像是锁定账户 或防止密码变更、过滤网络流量 或屏蔽应用程序 就像Screen Time一样 但可以根据应用程序的品牌 和功能进行自定义 接着要讲的是家庭控制 通过使用家庭共享 家庭控制可以避免 未经监护人同意 就存取Screen Time API 一旦你的应用程序获得监护人批准 未经监护人同意 就不能将应用程序从设备中删除 另外 家庭控制也提供了 代表应用程序和网站的不透明令牌 这些令牌在Screen Time API中 用于监控或限制使用 并确保 单一家庭共享群组之外的任何人 都不会知道正在使用 哪些应用程序和网站 最后要介绍的是设备活动 这个框架可让你 通过为应用程序提供新的方法 来监控网络和应用程序的使用情况 并在需要时执行程序代码 进而超越Screen Time 因为你的应用程序是 家长控制应用程序 所以孩子不太可能有理由 在他们的设备上执行你的应用程序 那你要如何执行程序代码 来设定限制呢? 答案就在设备活动计划和事件 设备活动计划是在 时窗开始和结束时 呼叫应用程序扩展的时窗 事件则是使用情况监视器 当设备上的用户达到 设备活动计划中的使用门槛时 就会呼叫扩展 你的应用程序只需声明 所关注的使用类型以及何时会关注 结合这三个框架就会是这样 在监护人和孩子的设备上 安装上应用程序后 监护人可以在孩子的设备上 开启应用程序 应用程序通过家庭控制授权 之后 在监护人设备上 开启应用程序 选择设定、限制和规则 应用程序会将该信息 传送到孩子的设备 然后你的应用程序 会在孩子的设备上建立 设备活动的计划和事件 当计划发生或事件发生时 会呼叫应用程序的设备活动扩充 再从扩展功能中 通过管理设定来设定限制 是时候该介绍诺兰出场了 诺兰正在开发一个很棒的 新演示应用程序Homework 他会来跟各位说明 Homework是如何 使用Screen Time API 大家好 我是诺兰 Screen Time团队的工程师 我想向各位介绍 我的示范应用程序Homework Homework通过限制孩子 使用某些应用程序 来鼓励他们养成良好的习惯 他们必须在监护人希望他们使用的 其他应用程序中累积使用量 为了让Homework能顺利运作 我会使用Screen Time API的 全部三个框架 首先 我会带领各位完成 家庭控制的授权请求 接着是定期屏蔽监护人所选的 不鼓励使用的应用程序 然后 我会示范要如何在使用 够多鼓励使用的应用程序后 移除这些屏蔽 最后 我会自定义Homework 使用的屏蔽 来符合应用程序的品牌和功能 我将从项目设置和 授权家庭控制开始谈起 为了把Xcode项目设置为 包含家庭控制功能 我会前往项目编辑器 选择应用程序目标 然后按签名和功能底下的 加号按钮 搜寻家庭控制以找到该功能 并将其新增到项目中 现在功能已经新增好了 我就可以开始编写程序代码 Homework需要做的第一件事是 申请家庭控制的授权 可以用家庭控制框架中的 共享AuthorizationCenter在 启动应用程序时提出申请 申请有可能成功 也有可能失败 必须要由家中的监护人 核准Homework的家庭控制功能 才能呼叫函数 由于以前从未在这台iPhone上 执行过这个应用程序 所以申请授权时会通知 要求监护人核准 点击允许后 系统会提示监护人 用他们的Apple ID和密码 进行身份验证 才能继续操作 一旦监护人成功通过身份验证 呼叫requestAuthorization 就不会再次出现提示 而是会静默回传.success 为防止滥用 如果登录的iCloud 不是使用家庭共享的孩子 则requestAuthorization 会回传.failure 让应用程序准备好 使用Screen Time API 就是这么简单 诺兰 谢谢 刚刚看到了我们的示范应用程序 Homework要如何授权家庭控制 授权家庭控制还能 赋予你的应用程序其他的魔力 例如 一旦设备获得授权 用户就不能再注销iCloud 另外 应用程序会包含使用 NetworkExtensions框架构建的 设备上网页内容过滤器 而且这个过滤器会自动安装 且无法删除 这让应用程序能过滤 设备的网页流量 编写家长控制应用程序的 其中一项挑战是 就算孩子永远不会执行你的应用程序 也要让程序代码能在孩子的设备上运行 针对Screen Time API 我们打造了一种通过 DeviceActivity执行 后台程序代码的新方法 DeviceActivity扩充功能会是你 与Screen Time API的其余部分 进行交动的主要方式 我们接着再请诺兰回来谈谈 Homework是如何重复执行程序代码 通过在某些应用程序上设置 Screen Time功能来限制孩子的设备 诺兰 克里斯 谢谢 Homework的下一步是不断屏蔽 监护人所选择的 不鼓励使用的应用程序 由于没办法确保应用程序会 在孩子的设备上执行 所以我会每天用 DeviceActivitySchedule 设定应用程序屏蔽限制 即使是Homework因为监护人设置 而没有运行时也会这样做 当我的DeviceActivitySchedule 触发时 DeviceActivity会呼叫 一个新的扩充点 Homework会包含 这个扩充点的扩充功能 我就会在其中设定 屏蔽应用程序的限制 必须将DeviceActivityMonitor 子类别化为主要类别 才能实作这个扩充点的 扩展功能 在这里 我在扩展功能的主要类别中 覆写了两个方法: intervalDidStart 和intervalDidEnd 会在排程开始和结束后 第一次使用设备时呼叫这些函数 在我从Homework的主应用程序 设定DeviceActivitySchedule之前 我会把这些函数的实作留空 现在我在主应用程序设定了 DeviceActivityMonitor扩充功能 我需要建立一个 DeviceActivityName 和一个DeviceActivitySchedule DeviceActivityName可以用来 在扩展功能中引用活动 DeviceActivitySchedule 则是能表示 扩展功能监视活动的时间限制 我将活动名称设定为“每天” 并将我的排程设定为半夜开始和结束 我也会将这个排程设为重复 最后 我可以建立 一个DeviceActivityCenter 并使用我刚刚定义的活动名称 和排程呼叫startMonitoring 通过这几行程序代码 每当排程开始和结束时 我的DeviceActivityMonitor 扩展功能 都会用活动名称进行呼叫 屏蔽应用程序的另一个要素是 弄清楚监护人想要阻止什么 FamilyControls框架 有一个专门用于工作的 SwiftUI元素 FamilyActivityPicker 在主应用程序的用户界面中 我可以显示FamilyActivityPicker 并允许监护人从家庭使用的应用程序 网站和类别列表中进行选择 监护人选好后 Homework可以用选择器传回的 不透明令牌来 设定对每个令牌所代表的 应用程序、网站和类别的限制 我也将.familyActivityPicker 视图修饰符新增到应用程序中的按钮 并将选择器的选择参数绑定到 应用程序模型中的属性 只要监护人在用户界面更新了选择 我的模型也会一并更新 现在我已经在我的应用程序模型中 储存了监护人所选不鼓励使用的 应用程序 接着回到 DeviceActivityMonitor扩充功能 首先 我会导入 ManagedSettings模块 来存取应用程序屏蔽限制 然后我可以在intervalDidStart 从应用程序的模型中 拉取选择并相应地设定 应用程序屏蔽限制 而我可以在intervalDidEnd 通过将其设定为nil来取消限制 利用这些简单的修改 Homework在每天的半夜都会不断设定 屏蔽监护人所选 不鼓励使用的应用程序 克里斯 接下来交回给你 诺兰 谢谢 屏蔽并不是管理设定中 唯一可用的限制 我们还可以在设备活动计划 开始或结束时设定任意数量的限制 举例来说 你的应用程序可以选择 阻止建立或删除账户 完全封锁应用程序和网站 或按年龄限制媒体内容 说到媒体限制 管理设定还提供了一个API 可以让任何应用程序 读取电影和电视内容的限制 不需要家庭控制授权 这些功能非常适合所有媒体应用程序 检查设备是否应该限制 呈现给用户的内容 在Homework示范应用程序中 限制会在每天半夜进行设定 但是如果你想 根据应用程序或网络使用情况 变更限制怎么办? DeviceActivity有另一项功能 可以让应用程序做到这一点 DeviceActivity事件 这些事件是用你从 FamilyActivityPicker 看到的相同令牌进行配置 并可让你在达到使用限制时 执行程序代码 这些事件会与诺兰刚刚在 最后一段向我们展示的排程一起注册 现在我们来和诺兰一起看看 这些事件是如何运作的 我想取消应用程序的 屏蔽限制 不仅是在Homework的排程结束时 也能在孩子针对监护人所选的 鼓励使用的应用程序 累积了足够的使用量时取消屏蔽限制 为此 我需要将 DeviceActivity设定为 在达到使用门槛时额外呼叫 DeviceActivityMonitor扩充功能 来监控这些鼓励使用的应用程序的 使用情况 在这里 我会将 DeviceActivityEvent.Name 定义为“鼓励使用” 这个名称让我可以从我的 扩展功能中引用事件 然后我会定义我的鼓励事件 进而包含监护人所选的 鼓励使用的应用程序和 所需的使用门槛 最后 我会更新对 startMonitoring的呼叫 来包含我刚刚定义的事件 现在我从主应用程序监控 DeviceActivity事件 只要这些事件有 任何一个达到使用门槛 就会呼叫我的 DeviceActivityMonitor 扩展功能 会用DeviceActivityEvent.Name 和DeviceActivityName呼叫 函数eventDidReachThreshold 借此确定哪个事件是 由哪个计划活动所触发 当Homework的扩充功能 收到此事件的通知时 我想将应用程序屏蔽限制设为nil 将此限制设为nil后 就能取消任何以前遭屏蔽应用程序的 屏蔽限制 接下来交回给克里斯 在上一个部分 不鼓励使用的应用程序 会通过预设的Screen Time进行屏蔽 但是你可能会希望 用自己的方式和风格来屏蔽 你可能还会希望针对屏蔽按钮 能够有自己的动作处理程序 我们为两个需求提供了工具 自定义屏蔽可以让你 创造独特的个人化体验 若要自定义屏蔽 就必须实作ManagedSettings中 定义的两个新扩展点 其中一个扩展点可让你 通过变更背景素材 标题、图标和按钮的外观 来自定义屏蔽的外观 另一个扩展点则是能让你 建立自定义按钮处理程序 我们再请诺兰来谈谈要 如何自定义屏蔽 如果要自定义Homework 屏蔽的外观和感觉 需要先将 ShieldConfigurationProvider 子类别变成扩展功能的主要类别 Configuration是需要在 此处覆写的唯一函数 这个函数是用来传递 目前遭屏蔽的应用程序的引用 这个函数应该要传回一个 ShieldConfiguration结构 ShieldConfiguration结构 让你能够 定义背景效果、背景颜色 图标、标题、副标题、主按钮标签 主按钮背景颜色和辅助按钮标签 哇 这真的能自定义很多东西 这个结构通过 ShieldConfigurationProvider 扩充功能设定和传回后 操作系统会自动在Homework屏蔽的 任何应用程序上显示这些自定义 现在我们已经为屏蔽加上了个人风格 我可以使用ManagedSettings的 第二个扩展点来设定主要和 次要按钮的操作处理程序 我会在这个新的扩展功能中 将ShieldActionHandler子类别 改成主要类别 并覆写函数句柄 句柄函数会知道是主按钮动作 还是次按钮动作被按下 以及目前正在屏蔽 哪些应用程序 你必须用Shield ActionResponse 来呼叫completion handler函数 回应可以是关闭被屏蔽的应用程序 也可以是延迟动作 并重新进行屏蔽设定 在屏蔽中延迟动作的能力非常强大 因为这能让屏蔽在等待有关 如何进行的信号时有机会更新其外观 举例来说 当孩子在这里点击 “请求存取”时 可以通过延迟动作 指出屏蔽功能正在等待监护人的动作 加入了这些自定义屏蔽功能后 我的示范应用程序 Homework就完成了 监护人可以选择要屏蔽的应用程序 像是游戏或娱乐 并在孩子完成 阅读、学习或培养创意等 积极正向的屏幕使用时间后 就会取消屏蔽 感谢各位与我一起 构建这个很棒的新示范应用程序 现在交还给克里斯 今天 我们了解到 构成Screen Time API的 三个框架是如何实现提供限制 保护隐私 和提供全新动态体验 这三个目标 管理设定框架可以让应用程序 强制执行设定和限制 设备活动框架可以让应用程序 按照计划或使用事件执行程序 即使应用程序未被使用也会执行 而家庭控制功能则能让我们 存取管理设定和设备活动 并保护用户的隐私 保证只有监护人知道 孩子在做什么 与所有框架一样 Screen Time API也会 根据各位的意见回馈持续进步 所以来试试看吧 让我们知道 这些功能是否支持你个人的使用方式 感谢各位今天加入我们 请尽情享受WWDC 2021 [音乐]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。