Meet WeatherKit
System & Services 进阶 20m

认识 WeatherKit

Meet WeatherKit

2022年6月6日

在 Apple 官方观看视频

一句话判断

Apple Weather 背后的气象数据现在通过 WeatherKit 对第三方开放——Swift 框架和 REST API 双通道,涵盖当前天气、逐分钟降水、十日预报和恶劣天气警报。

这场 Session 讲了什么

Apple 创建了全新的 Apple Weather Service,使用高分辨率气象模型和机器学习预测算法提供全球超本地化天气预报。WeatherKit 把这套数据通过开发者 API 暴露出来。

数据集包括六类:当前天气(温度、UV 指数、风力)、逐分钟降水预报(未来一小时)、逐小时预报(最长 240 小时)、逐日预报(未来 10 天)、恶劣天气警报、以及历史天气数据。

接入方式有两种:Swift 原生框架(通过 WeatherKit import)和 REST API(任何平台都能用)。Swift 框架用 async/await 几行代码就能获取天气数据。REST API 使用 JWT 认证,返回 JSON 格式。

隐私方面,位置信息只用于提供天气预报,不关联个人身份信息,不会被分享或出售。

值得深挖的点

  • 六大数据集的覆盖范围:逐分钟降水不是所有地区都有,使用前需要检查数据可用性。历史数据需要通过指定 start/end date 请求 hourly 或 daily 端点获取。
  • Swift 框架的简洁性:创建 WeatherService 实例,调用 weather(for:location) 就能获取完整天气数据。可以指定只需要特定数据集(比如只请求逐小时预报)来优化网络请求。
  • REST API 的认证流程:需要在 Developer Portal 注册 WeatherKit,获取 Team ID 和 Key ID,用私钥生成 JWT Token。Token 的有效期最长 24 小时。
  • 归因要求:你的 App 必须展示 Apple Weather 标识和数据来源的法律信息。框架提供了 attribution.legalPageURL 和 Apple Weather mark 的下载链接(支持 light/dark 变体)。

代码片段

import WeatherKit
import CoreLocation

// Swift 框架:几行代码获取天气
let weatherService = WeatherService()
let location = CLLocation(latitude: 43.0481, longitude: -76.1474) // Syracuse, NY

// 获取完整天气数据
let weather = try await weatherService.weather(for: location)
print("当前温度: \(weather.currentWeather.temperature)")
print("UV 指数: \(weather.currentWeather.uvIndex)")

// 只请求特定数据集
let hourly = try await weatherService.weather(
    for: location,
    including: .hourly
)

// 获取归因信息
let attribution = try await weatherService.attribution
let legalURL = attribution.legalPageURL
let lightMarkURL = attribution.appleWeatherMark(light: true)
# REST API 示例
curl -H "Authorization: Bearer $JWT_TOKEN" \
  "https://weatherkit.apple.com/api/v1/weather/en_US/43.0481/-76.1474?dataSets=currentWeather,forecastHourly"

最佳实践

  • 只请求你需要的数据集,减少网络传输和内存占用
  • 缓存天气数据,不要每次打开 App 都重新请求
  • 在 App 中展示 Apple Weather 归因标识,这是使用条款要求的
  • REST API 的 JWT Token 设置合理的过期时间(建议 1-2 小时)
  • 处理 API 调用失败的情况,展示有意义的降级 UI

还有什么值得关注

  • WeatherKit 替代了之前的 Dark Sky API(已停止服务)
  • REST API 支持 language 参数返回本地化的天气描述
  • 恶劣天气警报数据对户外和出行类 App 至关重要
  • 示例项目(Flight Planner)在 Session 的关联链接中可以下载
WWDC 2022