BIGME / DESK배터리 확인 중
--:--

날짜 확인 중

SEOUL · 서울 기준 / 초 단위 갱신 없음

오늘의 일정

샘플 · 미연결

실제 Google 일정이 아닙니다. 현재 날짜에 맞춘 예시입니다.

할 일

Google Tasks 미연결 · 하단 Tasks 연결을 눌러 주세요.

화면 설정 · 사용 안내

시계는 분이 바뀔 때만 갱신합니다. 애니메이션·깜빡이는 콜론·외부 폰트·전체 페이지 자동 새로고침이 없습니다. 하단 ‘전체 새로고침’은 필요할 때만 사용하세요. 인증이 유효하면 연결을 복원하고, 만료되면 Google 재연결이 필요합니다. PWA 설치는 Chrome 메뉴의 ‘앱 설치’ 또는 ‘홈 화면에 추가’에서도 가능합니다. 숨겨진 탭에서는 타이머를 멈추고 화면 복귀 시 현재 시각을 표시합니다.

할 일은 선택한 Google Tasks 목록에 저장합니다. Tasks 연결 후 목록을 불러오면 추가할 수 있습니다. 연결 만료나 조회 실패 시 다시 연결·동기화해야 합니다.

배터리는 이 페이지를 실행 중인 기기의 실제 잔량·충전 여부를 읽습니다. PC에서 열면 PC, B7 Pro에서 열면 B7 Pro 값입니다. 충전기 연결·해제, 잔량 변경 및 화면 복귀 시 갱신합니다. 미지원 또는 접근 실패 시 ‘확인 불가’로 표시하며 임의의 수치를 만들지 않습니다. B7 Pro에서는 Battery Status API를 지원하는 브라우저와 HTTPS 실행 환경이 필요합니다. Android 절전이나 브라우저 정책에 따라 값 전달이 늦거나 제한될 수 있습니다.

전체 화면은 지원 브라우저에서 버튼으로 진입합니다. 화면 켜짐 유지는 이 파일에서 제어하지 않습니다. Android 화면 꺼짐 시간을 별도 설정하세요. 절전·백그라운드 제한 중에는 갱신이 지연될 수 있습니다. 잔상 제거와 물리적 전체 리프레시는 기기의 전자잉크 설정에서 조절합니다.

Google 연결 · Calendar / Tasks

클라이언트 시크릿은 입력하지 마세요. ID는 이 브라우저에 저장하며 액세스 토큰은 이 창의 sessionStorage에 만료 시점까지 보관합니다. 연결 해제·만료 시 삭제합니다.

미연결 · 샘플 모드

실행 주소:
실제 연결은 등록된 HTTPS 주소 또는 PC 개발용 localhost에서 가능합니다. file://에서는 연결할 수 없습니다.

기본 상태는 샘플 모드입니다. Tasks 연결은 할 일 읽기·추가·완료·삭제 권한을 요청합니다. 연결 후 선택한 Google 목록의 할 일만 표시하고 추가·완료·삭제를 반영합니다. 각 기기에서 같은 계정과 같은 목록을 선택해야 합니다. B7 Pro에서도 이 HTTPS 주소를 열고 같은 계정으로 연결하세요. 같은 창의 새로고침은 유효한 인증을 복원하며, 토큰 만료 후에는 재연결이 필요합니다. 실시간 푸시가 아닌 설정 간격 또는 수동 조회로 동기화합니다. 클라이언트 ID와 실행 주소를 설정한 뒤 Google 연결 버튼을 누르면 읽기 전용으로 실제 일정을 조회합니다. 연결 전에 Google로 요청하지 않습니다. 아래는 필요한 설정과 상시 운용 구조입니다.

① 짧은 세션용: 브라우저 직접 연결

  1. Google Cloud 프로젝트에서 Calendar API를 활성화합니다.
  2. OAuth 동의 화면을 구성하고 테스트 상태라면 사용할 계정을 테스트 사용자로 등록합니다. 조직 계정은 관리자 정책도 확인해야 합니다.
  3. 웹 애플리케이션 OAuth 클라이언트를 만들고 실제 서비스의 HTTPS origin을 정확히 등록합니다. 파일(file://) 실행은 OAuth용 origin으로 사용할 수 없습니다. PC의 localhost는 개발용이며 휴대폰의 localhost와 다릅니다.
  4. HTTPS로 이 화면을 제공하고 Google Identity Services를 추가합니다. 사용자가 ‘Google 연결’을 눌러 캘린더 이벤트 읽기 전용 권한(calendar.events.readonly)과 캘린더 목록 읽기(calendar.calendarlist.readonly)를 승인합니다. 클라이언트 ID는 공개 식별자이며 클라이언트 시크릿을 HTML에 넣지 않습니다.
  5. 액세스 토큰은 현재 창의 sessionStorage에 만료 시점까지 보관하고 Authorization: Bearer로 Calendar API events.list를 호출합니다. 선택한 각 캘린더, 서울 기준 오늘 00:00~다음 날 00:00, singleEvents=true, orderBy=startTime을 사용하고 nextPageToken을 끝까지 처리합니다. 종일 일정의 종료일은 미포함으로 해석하고 취소·반복 일정과 날짜 변경을 처리합니다.
  6. 5~15분마다 조회하되 토큰 만료 시 ‘다시 연결 필요’를 표시하고 사용자 클릭으로 재승인합니다. 토큰 모델은 장기간 무인 운용에 제약이 있습니다.

② 책상 상시 표시용 권장안: 작은 서버 중계

최초 Google 승인 → 서버의 OAuth 코드 교환 → 서버가 refresh token을 암호화 보관 → 서버가 일정 조회·15분 캐시 → 이 화면은 인증된 동일 출처 /api/agenda에서 최소 일정만 조회.

서버에는 등록된 HTTPS 리디렉션 URI, state 검증, 안전한 세션 쿠키(HttpOnly·Secure·SameSite), 로그아웃·연결 해제·토큰 폐기가 필요합니다. 휴대폰에는 Google refresh token이나 클라이언트 시크릿을 배포하지 않습니다. 테스트 상태의 외부 앱은 Calendar 권한 사용 시 refresh token이 보통 7일 후 만료하므로 상시 운용 전에 게시 상태·검증 요건을 확인해야 합니다. 승인이 취소되면 재연결을 안내합니다.

실제 연결 후에는 샘플과 실데이터 상태를 분리하고 마지막 성공 조회 시각을 표시합니다. 네트워크 실패 시 기존 일정을 유지하되 ‘오래된 데이터’를 표시하고, 빈 일정과 조회 실패를 구분합니다. 브라우저의 Google 로그인 가능 여부가 기준이며 이 샘플은 HiBreak의 Google Play 인증 상태를 검증하지 않습니다.

공개 캘린더나 비밀 iCal 주소로 개인 일정을 노출하는 방식은 사용하지 않습니다.

Google Calendar 시작 안내 · 브라우저 토큰 모델 · 서버 OAuth · 배터리 API