Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Meet WeatherKit #11

Open
Taehyeon-Kim opened this issue Jun 21, 2022 · 1 comment
Open

Meet WeatherKit #11

Taehyeon-Kim opened this issue Jun 21, 2022 · 1 comment
Assignees
Labels

Comments

@Taehyeon-Kim
Copy link

WeatherKit offers valuable weather data for your apps and services to help people stay up to date on the latest conditions. Learn how to use Swift and REST APIs to access information about the current weather, 10-day hourly forecasts for temperature, expected precipitation, wind reports, the UV Index, and more. We'll also share how WeatherKit can provide timely, hyperlocal weather information without compromising someone's personal data or their privacy.

@Taehyeon-Kim
Copy link
Author

Taehyeon-Kim commented Jun 21, 2022

WeatherKit을 만든 이유

날씨 정보의 중요성

우리는 날씨 데이터에 의존하며 삽니다. 상황을 한 번 가정해보겠습니다.

  • Apple Watch에서 날씨를 확인하고 외출하기 전에 우산을 가지고 가는 것
  • 비와 서리 등을 예측하면 농부들이 윤작을 계획하는데 도움이 되는 것
  • 겨울 여행 시 폭풍에 대한 안전 및 준비

위에서 언급한 여러 가지 상황에 이르기까지 날씨는 모든 사람에게 영향을 미치는데요.이에 따라서 정확한 기상 데이터는 변화하는 기후의 영향을 많이 받는 오늘날의 세계에 더욱 중요해졌습니다.

그래서 WeatherKit을 만들었습니다.

WeatherKit

  • 고해상도 기상 모델
  • 머신 러닝
  • 예측 알고리즘

위의 기술을 사용하여 전 세계의 초지역 기상 예보를 제공합니다. Apple Weather Service를 통해서 많은 데이터에 접근할 수 있습니다.

정확한 날씨 데이터는 위치 정보가 필요합니다. 그리고 그 데이터를 비공개로 유지하도록 합니다. 사용자 정보를 손상시키지 않으면서 지역적 예측을 제공하도록 WeatherKit는 설계되었습니다. 위치 정보는 오직 일기 예보를 제공하는데만 사용되고 절대 공유되거나 판매되지 않습니다.

Available Weather datasets

스크린샷 2022-06-21 오후 3 22 54

Current weather

요청된 위치의 현재 조건을 설명합니다.

  • 단일 시점
  • UV 지수, 온도, 바람, 습도 등의 조건

Minute forecast

다음 시간에 대한 분별 강수량 조건이 포함됩니다.

  • 외출 시 우산을 챙길지 여부를 결정하는 데 유용

Hourly forecast

현재 시간부터 시작되는 예보를 모아 놓은 것으로 최대 240시간 동안의 데이터를 제공합니다. 시간별 예보의 각 시간에는 습도, 가시성, 기압 및 이슬점과 같은 조건이 포함됩니다.

Daily forecast

10일 예측 수집이 포함됩니다. 일별 예보의 각 요일은 고온 및 저온, 일출 및 일몰과 같은 하루에 대한 정보를 제공합니다.

Weather alerts

요청된 위치에 대해 발행된 심각한 기상 경보가 포함됩니다. 사용자를 안전을 위한 정보를 제공하며 대비할 수 있도록 합니다.

Historical weather

저장된 과거 일기 예보를 제공하므로 날씨 데이터의 추세를 볼 수 있습니다.

Requesting weather

WeatherKit API를 사용하여 날씨 데이터를 요청하는 방법을 알아봅시다.

스크린샷 2022-06-21 오후 3 37 00

  1. 기본 프레임워크 사용 (Swift Framework)
  2. REST API 세트 사용

Swift Framework 사용

몇 줄만 있어도 쉽게 사용할 수 있습니다.

// 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)
// 1. 온도 데이터에 접근
let temperature = weather.currentWeather.temperature
// 2. UV 데이터에 접근
let uvIndex = weather.currentWeather.uvIndex

REST API

Demo 프로젝트는 여기에서 다운로드 할 수 있습니다.

WeatherKit을 활성화해야 합니다.

  • Certificates, Identifiers, and Profiles를 방문합니다.
  • APP ID, Bundle ID를 등록합니다.
  • App Service 탭에서 WeatherKit을 체크(선택)합니다.
  • Xcode로 가서 Signing & Capabilities tab를 클릭 후 WeatherKit을 추가해줍니다.

Demo Service

Filght Planner App

스크린샷 2022-06-21 오후 4 00 28

  1. 구조체 만들기 (생략)
  2. Shared Weather Service에서 weather(for:)를 호출해서 시간별 예보 얻기

Data Source에 대한 저작권 표시

날씨 데이터 소스에 대한 저작권 정보가 포함된 Link(Apple로고 포함)를 표시해야 합니다. Light, Dark 모드를 모두 지원합니다. colorScheme 환경 값을 통해서 표시하는 것을 조정합니다.

struct ContentView: View {
    var body: some View {
        .task {
            do {
                let attribution = try await WeatherService.shared.attribution
                attributionLink = attribution.legalPageURL
                attributionLogo = colorScheme == .light ? attribution.combineMarkDarkURL : attribution.combineMarkLightURL
            } catch {
                print(error)
            }
        }
    }
}

Apple weather mark 및 Attribution link는 SFSafariViewController에서 열립니다.

지금까지 다룬 것은 기본 프레임워크에 불과합니다. REST API는 Swift 프레임워크와 동일한 풍부한 날씨 데이터를 제공하고, 모든 플랫폼에서 사용할 수 있습니다.

REST API 사용하기

weatherkit.apple.com 엔드포인트에서 날씨 알림을 요청하는 방법을 알아봅시다.

/* 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;

위의 예시는 웹에서 데이터를 받아오는 과정인 것 같습니다.

  1. 인증 토큰을 요청합니다.
  2. 날씨 객체를 가져오기 위해 URL을 만듭니다.
    2-1. 현지화된 응답에 적절한 언어(국가)를 설정해야 합니다.
    2-2. 그리고 적절한 위도와 경로를 제공합니다.
  3. URL과 인증 토큰을 사용해서 날씨 데이터를 가져와 JSON으로 변환합니다.

REST API 인증 처리

WeatherKit REST API의 경우 인증을 처리하기 위한 몇 가지 추가 단계가 있습니다.

  • 개발자 포털에서 WeatherKit 및 관련 서비스 ID에 대해 활성화된 인증키를 생성합니다. (WeatherKit 요청에 대한 액세스 활성화하기)
  • WeatherKit은 각 요청에 대한 승인을 확인하기 위해서 토큰이 필요합니다.
  • 따라서, 서버에서 토큰 서비스를 배포해야 합니다.
  • 개인 키를 사용해서 서명된 JSON Web Token을 생성합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant