Programming/iOS

[WidgetKit] Deep linking (LinkAPI, widgetURL modifier)

devssun 2021. 10. 29. 00:33
728x90
반응형

WidgetKit Deep linking

  • 위젯은 애니메이션이나 커스텀 interaction이 없지만. 위젯에서 앱으로 deep linking할 수 있다.
  • 위젯은 세가지 스타일이 있다. (.systemSmall, .systemMedium, .systemLarge)
    • systemSmall위젯 하나가 큰 tap 영역이다.
    • systemMediumsystemLargeSwiftUI link API를 사용해서 위젯에 tap이 가능한 구역을 설정할 수 있다.

Deep Linking을 할 수 있는 두가지 방법

링크 : https://developer.apple.com/documentation/widgetkit/creating-a-widget-extension - Respond to User Interactions

  1. Link API : view를 Link로 감싸고 destination url을 전달한다.
    • .systemMedium, .systemLarge 에서만 가능하다.
    • 복수 Link 구성이 가능하다.
  2. widgetURL(_:) : view에 widgetURL 수정자를 추가한다.
    • 모든 위젯 사이즈에서 사용할 수 있다.
    • 두 개 이상 사용할 수 없다.

언제 Link를 쓰고 언제 widgetURL()을 써야할까?

  • 한 화면에 하나의 URL만 존재한다?, small 사이즈다? → widgetURL
  • 여러개의 URL이 존재한다? → Link

위젯에서 앱으로 deep linking하는 2가지 방법

  1. 위젯이 interaction을 수신하면 앱은 URL을 앱 생명주기에 따라 onOpenURL(perform:), application(:open:options:), or application(:open:)에 전달한다.
  2. Link나 widgetURL을 사용하지 않고 앱을 실행한 경우는 NSUserActivityonContinueUserActivity(:perform:), application(:continue:restorationHandler:), 또는 application(_:continue:restorationHandler:)에 전달한다.
    userInfo에 해당 위젯에 대한 세부 정보가 들어있다. WidgetCenter.UserInfoKey 키를 사용한다.
반응형