大多数浏览器和
Developer App 均支持流媒体播放。
-
WeatherKit 简介
WeatherKit 为您的 App 和服务提供重要的天气数据,以帮助用户掌握最新的天气状况。学习如何利用 Swift 和 REST API 来获取关于当前天气的信息、未来 10 天的每小时温度预测、降雨概率、风况报告、紫外线指数,等等。我们还将分享 WeatherKit 在及时地提供当地天气信息的同时,保护用户的个人数据及隐私的强大功能。
资源
相关视频
Tech Talks
WWDC22
-
下载
♪ ♪ ♪ 欢迎来到 WWDC22 的 “WeatherKit 简介” 我叫 Novall 是天气团队的工程师 我们对天气数据的依赖与日俱增 所以从哪里获得天气数据 变得非常重要 从出门前 在 Apple Watch 上查看天气 来决定是否 携带雨伞 到通过预测降雨和霜雪以便于 协助农民规划轮作的 可持续农业工作 为冬季风暴中的旅行 保证安全并做好准备 天气影响每个人 准确的天气信息在如今 深受天气变化影响的世界中 变的比以往更重要 而获得准确的预测 也比在以往任何时候都重要 这就是我们创建 WeatherKit 的原因 WeatherKit 由全新的 Apple Weather Service 提供支持 这是一个顶级的全球天气预报系统 它使用高分辨率气象模型 以及机器学习和预测算法 为您提供超本地化 的全球天气预测 借助 Apple Weather Service 我们可以访问大量数据 所有这些信息都可以通过 WeatherKit 提供给您 准确的天气数据 需要用户的位置信息 而对这些数据保密 是一项共同的责任 为了遵守我们对隐私的承诺 WeatherKit 旨在 不泄露用户信息的情况下 提供超本地化天气预报 位置信息仅用于提供天气预报 这个信息不会关联 任何个人识别信息 且这些数据永远不会共享或出售 我们会让您 在 WeatherKit 中轻松的 完成对用户信息的保密 今天我将深入介绍 有关 WeatherKit 的更多细节 这样您就可以 充分利用了解我们的新 API 首先我将介绍 通过 WeatherKit 提供的 可用的数据集 该数据集由我们的 Apple Weather Service 提供支持 接下来我将分别向您展示 如何使用 WeatherKit 框架 获取天气信息 以及一个可以在任意系统平台上 获取天气信息的 REST API 最后 我将介绍一些额外的实现要求 和必备条件 让我先概述一下可用的天气数据集 正如我所提到的 您可以访问 WeatherKit 中的大量数据 那么让我们来谈谈每个数据集 当前天气数据集提供 请求位置在“现在”条件下的数据 它表示一个时间点下的条件数据 包括紫外线指数、温度和风力等信息 分钟预报包含在可用区域内的 下一个小时里每分钟的 降雨情况预测 该数据集对于您决定出门前是否带伞 非常有帮助 小时预报提供 从当前时间开始 到未来 240 小时之间 的数据预测集合 在这里会提供每个小时的预测信息 包含如湿度 能见度 压力和露点等信息 每日预测 提供未来 10 天的预测信息 每一天的预测均提供 有关全天的预测信息 比如高温和低温 日出和日落 气象警报提供 所请求位置的恶劣天气警告 该数据集所包含重要信息 可以确保您用户的安全 对天气状况充分了解并做好准备 最后 历史气象提供 保存的历史气象数据 这样您就可以看到天气数据的趋势 您可以通过指定开始和结束日期 访问每日和每小时的 历史天气数据 这让您可以访问大量数据 我们相信您会利用历史天气数据 实现利用很多 重要且有效的功能方法 既然您已经看到了 所有可用的天气数据数据 现在我将向您介绍 如何使用 WeatherKit API 请求天气数据 Apple Weather 数据 可通过原生框架 (WeatherKit) 和 REST API 获得 首先 让我向您展示 使用我们的 Swift 框架 访问天气数据有多容易 几行代码就足够了 使用 Swift 的并发功能 请求天气数据非常简单 首先 您需要导入 WeatherKit 和 CoreLocation 库 然后您需要 实例化一个 weatherService 对象 作为天气服务的入口 您需要为您感兴趣的位置 创建一个描述坐标的 CLLocation 变量 在这里 我使用的是 我的家乡 New York Syracuse 的坐标 然后在 weatherService 实例上 调用 weather(for:) 方法 并传入上面创建的位置变量 当请求结束后 您即可在 App 中 访问所需的天气数据 就像这个例子中的 当前温度和紫外线指数一样 现在我已经向您展示了 使用 Swift 请求天气数据有多容易 让我再举一个例子 我正在使用我在 Swift UI 框架中构建的旅行 App 您可以从本教程关联的描述中 获取该讲座的链接 因为我真的很期待再次旅行 我决定创建一个飞行计划 App 来计划我的下一次旅行 我已经完成了 旅行 App 的设计逻辑 但是当我点击 旅途中的任意一个航班时 我想以列的形式 显示包含每个目的地的 环境 降水 风力和温度的信息 第一步是启用 WeatherKit 在开发者门户中注册 App ID 然后选择功能 和 App 服务选项卡 启用 WeatherKit 然后在 Xcode 中的对应项目内 添加 WeatherKit 功能 有了这些准备工作 下面让我介绍一下 如何为每一个目的地获取天气数据 在这里我已经构建了 一个名为 Airport 的结构体 包含经纬度 和我的目的地机场的信息 我会通过 weather(for:) 方法 包含机场位置信息 来请求我们的共享天气服务 以获得每小时的天气数据
因为我只想要一个数据子集 我还需要在请求中 指定包括每小时预测的信息 现在 我将构建 并运行我的 App
现在我可以看到 我的自定义视图已更新 会显示每个机场的天气情况 构建这个 App 时 我需要做的下一件事 是在我的 App 中 显示数据源的归属 首先 我需要从 attribution.legalPageURL 获得归属链接 这是指向法律归属页面的链接 包含关于天气数据源 的版权信息 我还需要获取用于合并 Apple Weather 标记的链接 它有浅色和深色两种版本 所以我会检查 colorScheme 环境值 查看当前显示的深色或浅色外观 是否在 SwiftUI 中 得到正确的显示 最后 我将再次构建并运行
请注意 Apple Weather 标记和归属链接 在 SFSafariViewController 中打开 这就是获取天气信息所需的一切 使用 WeatherKit API 您可以有很多办法 在您的飞行 App 中 添加天气数据 但这只是原生框架 REST API 提供 同样丰富的天气数据 并且作为 Swift 框架 他可以在任何平台上使用 在此示例中 我将展示 如何通过 weatherkit.apple.com 接口 请求天气警报 首先 您需要请求一个验证令牌 这个我们稍后再讨论 然后 要获取天气对象 首先需要创建一个 标示给定位置的 所需天气数据集的 URL 为了适应软件的本地化 一定要设置合适的语言 然后提供 所需位置的经纬度 指明所需的数据集 您可能会注意到此参数是复数 所以您可以使用逗号分割多次请求 最后 请求位置的国家代码 但请注意 仅在请求天气警报时 国家代码才是必须的 接下来 您将获取天气数据 使用上面的 URL 和您的验证令牌 将结果转换为 JSON 格式 您可以用这个变量访问天气警报信息 以及他们的详细信息 再说一次 另一个例子对您来说 访问天气数据已经如此简单 只是这次是通过 REST API 要更深入地了解您需要的设置 让我们重温一下如何进行验证 对于 WeatherKit REST API 还有一些额外的 步骤来处理身份验证 在开发者门户中 您需要创建 为 WeatherKit 验证密钥 和相关联的服务 ID 来启用对 WeatherKit 请求权限 在开发者门户的 “Keys”(密钥) 部分中 可以创建私钥 WeatherKit 需要在每次请求中 用令牌来验证授权 因此 您需要 在您的服务器上部署一个 用于使用您的私钥的 已签名 JSON Web Token (JWT) 对于那些熟悉 JSON Web Token 验证的人 这是一个相当标准的授权流程 但如果您是第一次使用它 那么请听我分享一些这里的细节 要生成签名令牌 您需要按照开发者文档中所述 创建包含键名和值的Header 然后创建 专用于 WeatherKit Rest API 和您的 App 的有效信息 包括发行人 主题 和到期时间 最后 您需要签署令牌 以便于随后调用 WeatherKit REST API 回到我的天气警报示例 在这里 您将从您的签名服务中请求令牌 并为您的天气数据 HTTP 请求 添加 Authorization 令牌 Header 这就是通过 WeatherKit REST API 从 Apple Weather Service 获取 天气数据的两种好方法之一 最后 我将介绍 一些不论在 App Store 或其他平台发布 App 之前 使用 REST API 时的额外要求 这些要求全都对您适用 无论您使用的是 原生 Swift 还是 REST API 第一个要求是标注服务归属 正如您在我的演示中看到的 不论是在本地 App 或是网络 App 中 您都需要显示 服务来源的 API 链接 第二个要求是归属标志 WeatherKit API 可以为您在 App 中 提供很便捷的图片资源 最后 如果您要显示天气警报 您还需要链接到 提供活动信息的页面 就是如此容易 无论您是准备把 App 发布到 App Store 还是网上 这就是 WeatherKit Apple Weather Service 提供支持的超本地预报 通过我们的 Swift 框架 和 REST API 访问 两者都为您提供了无限可能 帮助您将天气数据 应用于您的 App 以及任何平台 或设备之中 我们希望您喜欢本次讲座 除了查看与本次讲座相关的链接 阅读文档并下载项目之外 我们还希望能得到您的反馈 我们迫不及待地想看到 您在使用 WeatherKit 时 展现的所有创造性 和有影响力的方式 谢谢您 祝您 WWDC 愉快! ♪
-
-
4:28 - Request the weather in Swift
// Request the weather import WeatherKit import CoreLocation let weatherService = WeatherService() let syracuse = CLLocation(latitude: 43, longitude: -76) let weather = try! await weatherService.weather(for: syracuse) let temperature = weather.currentWeather.temperature let uvIndex = weather.currentWeather.uvIndex
-
7:56 - Request the weather via REST API
/* Request a token */ const tokenResponse = await fetch('https://example.com/token'); const token = await tokenResponse.text(); /* Get my weather object */ const url = "https://weatherkit.apple.com/1/weather/en-US/41.029/-74.642?dataSets=weatherAlerts&country=US" const weatherResponse = await fetch(url, { headers: { "Authorization": token } }); const weather = await weatherResponse.json(); /* Check for active weather alerts */ const alerts = weather.weatherAlerts; const detailsUrl = weather.weatherAlerts.detailsUrl;
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。