일상

if(kakao) 2020 - iOS 14 WidgetKit 카카오톡 적용기

poppy 2020. 11. 19. 11:40
반응형

제가 아이폰을 쓰기도 하고 이번에 ios14로 업데이트하면서 가장 큰 차이점인 위젯에 관한 것을 다루고 있는 영상이라서 다음 링크의 영상을 보고 내용을 정리해보았습니다. 포스팅의 모든 사진의 출처는 다음 링크의 영상에 있습니다 :)

어떻게 코드가 구현되는지 궁금하시다면 영상을 참고해주세요!

if.kakao.com/session/111

 

if(kakao)2020

오늘도 카카오는 일상을 바꾸는 중

if.kakao.com

1. WidgetKit 도입 배경

안드로이드에서는 이미 있는 기능이었고, 사용자들이 알림 센터를 자주 보지 않습니다. WidgetKit은 내 입맛에 맞는 위젯을 구성하여 홈 화면을 만들 수 있습니다. 

 

2. Today Extension vs WidgetKit

Today Extansion과 WidgetLit의 가장 큰 차이는 홈 화면에 넣을 수 있는 것입니다. 하지만 한계도 존재하며 복잡한 UI처리에 매우 제한적입니다. ios14 이상 기기에서만 사용 가능합니다. Swift UI를 반드시 사용해야 하며 사용자 터치이벤트에 대해서는 WidgetURL/ Link를 사용하여 처리해야합니다. 번들 구성을 통해 동일 위젯을 다양한 형태로 제공합니다.

WidgetKit에는 현재 상태를 안고 있는 snapshot(), Entry 배열을 갖는 timeline()이 있습니다. 
View Content는 UI를 담당하고, Provider는 위젯의 갱신을 담당합니다. Provider를 통해 timeline에서 새로운 Entry를 불러오고 위젯에게 제공하여 위젯이 갱신되도록 합니다.
자원을 공유하기 위해서는 shared container를 구성해야합니다. 즉, 앱그룹을 구성할 수 있음

 

3. 카카오톡 WidgetKit 적용

기존 Today Extension에서는 각기 다른 Extension을 구현하였다면 WidgetKit은 하나의 카카오톡 위젯 번들로 묶고 카카오톡 위젯과 톡서랍 위젯을 모두 제공할 수 있습니다.

 

4. WidgetKit 한계

① Widget의 갱신 처리

-위젯의 갱신은 Provider 내의 timeline 메소드에서 처리됩니다

- Widget의 갱신 주기가 일정하지 않아서 시스템의 따라 다르기 때문에 몇 분의 오차가 발생할 수 있습니다.

- 갱신이 바로 적용되지 않는 경우가 생길 수 잇기 때문에 실시간 업데이트가 필요할 경우에는 WidgetKit은 요구 사항을 만족시키기 어렵습니다.

 

하지만 희망은 있습니다! 위젯의 갱신이 이루어지는 시점이 명확할 경우에는 실시간 업데이트를 가능하게 할 수 있습니다. 내가 원하는 특정 위젯을 갱신할 수 있습니다 (reloadTimeLines). Widget Bundele에 들어있는 모든 위젯을 갱신할 수 있습니다 (reloadAllTimelines) .

 

② 비동기 이미지 처리

- Provider에서 데이터를 받아올 때는 이미지까지 생성한 후 Entry에 넣어야 합니다

- 이미지를 비동기로 다운로드 받고 해당 이미지를 View Content에 적용하려면 이미 구현된 Today Extension 코드까지 모두 개선해야하는 경우가 생깁니다

- WidgetKit에서의 View는 그저 View일 뿐, 어떠한 처리도 하지 않습니다

 

③ UI 디자인의 한계

- 아이콘과 동일한 형태 및 타입입니다

- 아키노과 마찬가지로 배경은 불투명합니다

- 현재 투명 배경은 기본 App만 지원합니다

- Widget 디자인 시 한계가 존재합니다

반응형