스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
WeatherKit 소개
앱과 서비스에 유용한 날씨 데이터를 제공하는 WeatherKit을 통해 사용자가 언제나 최신 상태를 확인할 수 있습니다. Swift 및 REST API를 사용하여 현재 날씨 정보, 10일 단위의 시간별 기온 예보, 예상 강수량, 풍량 예보, 자외선 지수를 확인할 수 있는 방법을 알아보세요. 또한 WeatherKit을 통해 사용자의 개인 데이터나 개인 정보 보호를 침해하지 않고도 시기적절하게 지역별 날씨 정보를 제공하는 방법을 알려드립니다.
리소스
관련 비디오
Tech Talks
WWDC22
-
다운로드
♪ 잔잔한 힙합 연주 음악 ♪ ♪ WWDC22의 'Meet WeatherKit'에 어서 오세요 제 이름은 Novall이고 Weather 팀의 엔지니어입니다 우린 매일 기상 데이터에 의존하는데 이 정보를 얻는 곳이 중요합니다 외출하기 전에 Apple Watch에서 날씨를 확인하고 우산을 챙겨 가야 할지 아는 것에서부터 비와 서리를 예측하는 일이 농부들의 윤작 계획을 도울 수 있는 지속 가능한 농업과 겨울 폭풍 여행을 위한 안전을 준비하는 일까지 날씨는 모두에게 영향을 미칩니다 정확한 기상 데이터는 변화하는 기후에 영향을 받는 요즘 세상에 더욱 결정적인 것이 되었습니다 그리고 정확한 예보를 확보하는 일은 그 어느 때보다 지금 중요합니다 그런 이유로 우린 WeatherKit를 고안했습니다 WeatherKit는 세계적 수준의 기상 예보인 새로운 Apple Weather Service로 작동됩니다 그건 고해상도 날씨 모델과 기계 학습과 예측 알고리즘을 사용해서 근접 지역의 기상 예보를 전 세계에 전해줍니다 Apple Weather Service로 우린 많은 데이터에 접근할 수 있고 이 모든 걸 WeatherKit를 통해 여러분이 이용할 수 있습니다 정확한 기상 데이터에는 지역 정보가 필요합니다 그리고 그 데이터를 보호하는 일은 공동의 책임입니다 개인 정보 보호에 대한 우리의 전념에 일치하도록 WeatherKit는 사용자 정보를 위태롭게 하지 않고 근접 지역 예보를 전달하도록 설계되었습니다 위치는 기상 예보를 제공하는 데만 사용되고 어떤 개인 식별 정보와도 연관되어 있지 않으며 결코 공유되거나 판매되지 않습니다 WeatherKit로 여러분의 사용자 개인 정보 보호를 쉽게 만들었습니다 오늘 전 WeatherKit를 더 자세하게 설명해서 여러분이 새 API를 최대한 이용하실 수 있게 할 겁니다 첫째로는 우리가 WeatherKit를 통해 제공하는 이용 가능한 데이터 세트를 다루겠습니다 그것은 우리의 Apple Weather Service가 뒷받침하죠 다음으로 보여드릴 건 WeatherKit 프레임워크와 REST API 디자인을 써서 기상 정보를 요청하는 방법으로 어느 플랫폼에서든 기상 데이터를 얻을 수 있게 해드리겠습니다 그리고 마지막으로 구현 요구 사항들과 모범 사례들을 추가로 설명하겠습니다 이용 가능한 기상 데이터 세트의 개요를 먼저 설명하죠 언급했듯이 WeatherKit에선 많은 데이터에 접근할 수 있습니다 그럼 각각의 데이터 세트를 설명하죠 현재 날씨 데이터 세트는 요청된 지역에서 지금의 상태를 묘사해줍니다 그건 하나의 시점을 나타내고 거기에는 자외선 지수 기온, 풍속 같은 상태가 포함되죠 분 예보에는 가능한 곳의 다음 한 시간 동안 1분마다의 강수 상태가 들어 있습니다 이 데이터 세트는 사람들이 밖으로 나갈 때 우산을 챙겨 가야 하는지 결정하는 데 유용합니다 매시간 예보는 현재 시간에 시작하는 예보의 모음입니다 최대 240시간에 대한 데이터를 제공합니다 매시간 예보에서 각각의 시간에 포함되는 건 습도, 시계, 기압 이슬점 등의 상태입니다 일일 예보에는 10일 예보 집합이 포함되어 있습니다 일일 예보에 있는 매일은 하루 전체의 정보를 제공합니다 예를 들어 최고, 최저 기온 일출, 일몰 시간을요 기상 경보에는 요청된 지역에 발표된 심각한 기상 주의 사항이 포함됩니다 이 데이터 세트에는 사용자들을 안전하게 잘 알게, 준비하게 해주는 중요한 정보가 들어 있습니다 그리고 마지막으로 역사적 날씨는 과거의 기상 예보 중 저장된 걸 제공해서 기상 데이터의 동향을 볼 수 있습니다 매시간과 일일 요청에 시작과 종료 일자를 지정하는 방식으로 역사 데이터에 접근할 수 있습니다 그건 여러분이 많은 데이터에 접근하게 해주죠 여러분이 중요하고 영향력이 강하게 역사적인 날씨를 사용할 수 있는 방법이 많다고 봅니다 이용 가능한, 풍부한 기상 데이터를 다 보셨으니 WeatherKit API로 이 기상 데이터를 요청하는 방법을 알려드리겠습니다 Apple Weather data는 네이티브 프레임워크와 REST API 집합을 통해 이용 가능합니다 먼저 우리의 Swift 프레임워크로 데이터에 접근하는 방식이 얼마나 쉬운지 보여드리죠 코드 몇 줄만 있으면 다 됩니다 Swift 동시 실행으로 날씨 요청은 간단합니다 먼저 WeatherKit와 CoreLocation을 불러옵니다 그런 다음 weatherService 오브젝트를 Weather Service의 입구로 만듭니다 관심 있는 위치에 대한 좌표로 CLLocation을 만듭니다 여기에 제가 써 놓은 건 제 고향인 뉴욕주 시러큐스예요 weatherService 인스턴스에서 weather(for:)를 호출하고 위에서 만들어진 위치에 그걸 전달합니다 호출이 완료되면 앱에 필요한 관련 데이터에 여러분은 접근할 수 있습니다 이 사례에서 현재 기온과 자외선 지수 같은 데이터에요 Swift로 기상 데이터를 요청하는 게 얼마나 쉬운지 보여드렸으니 SwiftUI로 제가 구축하고 있는 여행 앱에서 사용 중인 또 다른 사례를 안내해드리죠 이 세션과 관련된 링크에서 여러분은 완성된 프로젝트를 받아볼 수 있습니다 저는 다시 여행하는 걸 많이 기대하고 있어서 비행 계획표 앱을 만들어서 다음 여행을 계획하기로 했어요 비행 일정을 위한 논리는 이미 만들어 놓았지만 제 여행에서 각각의 비행 일정을 두드릴 때 목적지별 상태, 습도, 풍속 기온이 들어 있는 열을 나타나게 하고 싶어요 첫 단계는 WeatherKit를 작동시키는 겁니다 Developer Portal에서 App ID를 등록한 다음 Capability와 App Services 탭을 선택해서 WeatherKit를 작동시킵니다 그런 다음 Xcode에서 WeatherKit 기능을 프로젝트에 추가합니다 그 준비를 마친 상황에서 이 장소들 각각에 대한 기상 데이터를 얻는 방식을 안내해드리겠습니다 여기에 저는 공항 데이터 구조를 이미 마련해놨는데요 제 목적지 공항의 위도와 경도가 포함되어 있습니다 매시간 예보를 확보해보죠 공유 날씨 서비스에 있는 weather(for:)를 호출해서요 그런 다음 우리 공항 위치를 넣어보겠습니다
저는 데이터의 부분 집합만 원하기 때문에 요청에 매시간 예보를 포함하도록 명시하기도 했습니다 이제 앱을 구축해서 돌려보겠습니다
이제 제 맞춤형 뷰가 업데이트되어 각 공항의 상태를 표시하는 걸 볼 수 있어요 이 앱을 구축하는 동안 제가 다음으로 해야 할 일은 제 앱의 데이터 출처의 귀속을 표시하는 겁니다 먼저 attribution.legalPageURL 속성에서 귀속 URL을 가져오겠습니다 이건 법적 귀속 페이지로 가는 링크인데 여기에는 기상 데이터 출처에 관한 저작권 정보가 담겨 있습니다 그리고 통합 Apple Weather 표시에 대한 URL도 얻어야 해요 그것에는 밝고 어두운 변이가 모두 있으니 제가 colorScheme 환경 값을 확인해서 SwiftUI 뷰가 밝거나 어두운 모습을 현재 표시하고 있는지 알아내겠습니다 마지막으로 다시 구축해서 돌려보겠습니다
주목해야 할 점은 Apple Weather 표시와 귀속 링크가 SFSafariViewController에서 열린다는 점입니다 우리 비행 계획표 앱에서 날씨를 얻는 데 필요한 건 그게 다고 WeatherKit API를 사용해서 앱에 기상 데이터를 넣을 수 있는 방법은 아주 많습니다 그건 네이티브 프레임워크에 불과했습니다 REST API는 Swift 프레임워크와 동일한 풍부한 기상 데이터를 제공하고 어느 플랫폼에서든 사용할 수 있죠 이 사례에서 제가 보여드리는 건 weatherkit.apple.com 종점에서 기상 경보를 요청할 수 있는 방법입니다 먼저 인증 토큰을 요청합니다 그건 잠시 후에 자세히 설명하죠 그리고 날씨 오브젝트로 가기 위해 주어진 위치의 원하는 데이터 세트를 표시하는 URL을 먼저 만듭니다 현지화된 반응을 위해 반드시 적절한 언어를 설정하세요 그리고 관심 지역의 위도와 경도를 제공합니다 원하는 데이터 세트를 표시하세요 이 파라미터는 복수인 걸 아셨을 수 있으니 여러 개를 한꺼번에 요청하세요 각각을 쉼표로 분리해서요 그리고 마지막으로 요청 지역의 국가 번호를 넣고요 다만 주의하실 점은 기상 경보 데이터 세트를 요청할 때만 국가 번호가 필요하단 겁니다 다음으로는 앞에 나온 URL과 인증 토큰을 사용해서 기상 데이터를 갖고 오고 그 결과를 JSON으로 전환합니다 그걸로 여러분은 기상 경보와 그 세부 사항에 접근할 수 있습니다 이번에도 기상 데이터에 접근하는 게 얼마나 쉬운지 보여주는 또 다른 사례였는데 이번에는 REST를 통해서였습니다 필요한 설정을 더 깊이 알아보기 위해 인증으로 다시 가보죠 WeatherKit REST API의 경우 인증 처리를 위한 단계가 추가로 몇 가지 더 있습니다 Developer Portal에서 WeatherKit 요청에 대한 접근을 가능하게 할 수 있습니다 WeatherKit와 관련 서비스 ID에 활성화된 인증 키를 만드는 방식으로요 그 비밀 키는 Developer Portal의 Keys 섹션에서 만들 수 있습니다 WeatherKit는 토큰이 각각의 요청에 대해 허가를 입증해주길 요구합니다 따라서 여러분은 서버에서 자신의 비밀 키를 사용해서 서명된 JSON 웹 토큰을 만드는 토큰 서비스를 배치합니다 JSON 웹 토큰 인증이 익숙하신 분들에게 이건 꽤 표준적인 허가 흐름이지만 그걸로 작업하는 게 이번이 처음인 분들을 위해 자세한 내용을 알려드리죠 서명된 토큰을 생성하기 위해 여러분은 개발자 문서에 설명된 필드와 값이 들어 있는 헤더를 만들 겁니다 그리고 WeatherKit REST API와 여러분의 애플리케이션에만 있는 정보가 들어 있는 페이로드를 만듭니다 거기에 발행자, 주제, 만기와 같은 항목들을 포함시켜서요 그리고 마지막으로 여러분은 토큰에 서명해서 이어지는 WeatherKit REST API에 대한 호출과 함께 사용하죠 제 기상 경보 사례로 돌아가서 서명 서비스에서 토큰을 요청하는 곳이 바로 여깁니다 그리고 기상 데이터에 대한 HTTP 요청의 Authorization 헤더에 토큰을 추가합니다 여기까지 WeatherKit REST API였습니다 Apple Weather Service에서 기상 데이터에 접근하는 두 가지 멋진 방법 중 하나죠 마지막으로 App Store에서의 공개를 위한 추가 요건 몇 가지를 다루겠습니다 또는 여러분이 REST API를 써서 어느 플랫폼에든 그걸 출시하기 전에요 네이티브 Swift와 REST API 중 뭘 쓰든 상관없이 이 요건들은 모두 적용됩니다 첫 번째 요건은 귀속입니다 제 시연에서 보셨듯이 우리 Attribution API에서 여러분은 링크를 받을 텐데 그걸 네이티브 혹은 웹 앱에 표시해야 합니다 두 번째 요건은 귀속 로고입니다 WeatherKit API는 그걸 쉽고 편리하게 해줍니다 앱에 표시해야 할 이미지 자산을 제공해서요 그리고 마지막으로 여러분이 기상 경보를 표시할 거라면 반응에 제공되는 이벤트 페이지로의 링크도 올려야 합니다 따라서 App Store나 웹에서의 공개를 위해 앱을 준비시키는 일은 그 정도로 쉽습니다 여기까지 WeatherKit였습니다 Apple Weather Service로 작동하는 근접 지역의 예보로 우리의 Swift 프레임워크와 REST API를 통해 접근할 수 있죠 두 가지 모두 가능성의 세계를 열어줍니다 여러분이 기상 데이터를 어느 플랫폼이나 기기에서든 사용할 가능성이죠 이번 세션을 즐기셨길 바랍니다 이번 세션과 관련된 링크를 확인하는 것 외에도 문서를 읽고 프로젝트를 다운받아보세요 그리고 물론 여러분의 피드백을 환영합니다 여러분이 창의적이고 영향력 있게 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;
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.