THIS IS ELLIE

WWDC2019 LinkPresentation 본문

공부/WWDC

WWDC2019 LinkPresentation

Ellie Kim 2019. 10. 21. 22:44

Embedding and Sharing Visually Rich Links

 

WWDC 2019에 Embedding and Sharing Visually Rich Links를 보고 사용해보고 싶다 생각이 들었다.

먼저 이 세션은 LinkPresentation에 대해서 설명하고 소개한다.

 

LinkPresentation 프레임 워크를 통해 앱 개발자는 풍부하고 아름답고 일관된 방식으로 URL을 쉽게 제시할 수 있으며,

LinkPresentation을 사용하여 URL에서 메타 데이터를 검색하고 앱 내부에 풍부한 링크 컨텐츠를 제공할 수 있다.

 

사실 흥미를 가진 이유는 이전에 프로젝트를 하며 또 과제를 수행하며 이런 TableViewCell을 만든 기억이 난다.

링크에 대한 프리뷰는 아니지만 LPLinkView와 같이 카드뷰 모양으로콘텐츠 뷰어를 만들어 본 경험이 있어서?

사실 별로 연관도 없는 거 같은데 그냥 새로 생긴 LinkPresentaion 프레임워크를 사용해보고 싶어 졌다.

 

WWDC 2019에 Embedding and Sharing Visually Rich Links 세션에서는 크게 3가지 주제를 다룬다.

  • URL 메타데이터를 가져오는 방법
  • 메타 데이터를 사용자에게 쉽게 표시하는 방법
  • 페치 된 메타 데이터를 사용해 iOS 13의 sharesheet를 빠르게 표현하는 방법

그중에서도 나는 URL 메타데이터를 가져와 표시하는 방법에 집중하고 LinkPresentation프레임워크에 대해서 알아보려 한다.

 

reference : https://developer.apple.com/videos/play/wwdc2019/262/ pdf

위와 같이 LinkPresentation 프레임워크를 통해서 링크를 보내면 링크에 어떤 내용이 포함되는지 프리뷰를 제공할 수 있다는 것이다.

사실 URL은 유저에게 친근하지 않으며, 여러 URL이 주어지면 각각을 구별하기 어렵다.

하지만 LinkPresentation 프레임워크 링크 메타데이터를 사용함으로써 유저는 URL들을 구별하기 수월해진다.

 

공식 문서에서 LinkPresentation 프레임워크는 앱에 다양한 링크를 가져오고 제공해주는 프레임워크라 설명한다.

공식문서를 살펴보면 프레임워크에 필요한 클래스들이 나온다.

 

reference : apple developer documentation 

LPMetadataProvider 클래스는 URL의 메타 데이터를 검색하는 객체다.

LPLinkMetadata 클래스는 URL에 대한 메타 데이터를 가지는 객체다.

LPLinkView 클래스는 링크의 풍부한 시각적 표현이다.

추가적으로 LPError 구조체는 LinkPresentation 프레임워크에서 리턴되는 오류다.

이들을 잘 활용해서 풍부하고 아름답고 일관된 방식으로 URL을 표현할 수 있다. 

 

굳이 필요할까? 싶지만 그냥 URL만 표시하면 아래와 같이 밋밋하다.

그리고 딱 봐도 각각의 URL을 구별하기 매우 어렵다. 

 

하지만 LinkPresentation 프레임워크를 사용하면 풍부하고 아름답고 일관된 방식으로 URL을 제기할 수 있다.

 

사용하기에 앞서 URL 메타데이터를 표시하는 방법의 흐름을 살펴보자.

 

URL을 가지고 LPMetadataProvider을 통해 LPLinkMetadata 객체를 추출한다.

LinkPresentation 프레임워크를 사용하면 URL을 전달하기만 하면 사용 가능한 프로퍼티를 포함한 (옵셔널이 있음 - 밑에 설명) LPLinkMetadata객체가 반환된다.

 

그럼 어떻게 사용할까?

 

대략적인 큰 흐름은 이렇다.

  1. 먼저 LPMetadataProvider객체를 생성한다.
  2. 원하는 URL을 사용해 startFetchingMetadata를 호출한다.
  3. Completion handler가 호출되면 오류가 있는지 확인한다.
  4. 서버가 응답하지 않거나 속도가 느리거나 사용자가 네트워크에 연결되지 않으면 메타데이터를 가져오는 것이 실패할 수 있다. (직접 구현해보며 메타데이터 가져오는 작업을 실패했을 때 Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service 에러가 발생했다.)
  5. 가져온 메타데이터를 사용한다.

여기서 메타데이터를 가져오는 함수는 바로 스타트패칭메타데이터 저 친구다.

뭐하는 역할인지는 알아야 하니 공식 문서를 살펴보자.

사실 이름만 봐도 메타데이터 패칭 시작할 거 같음.

func startFetchingMetadata(for URL: URL, completionHandler: @escaping (LPLinkMetadata?, Error?) -> Void)

예상한 대로 공식 문서를 살펴보면 LPMetadataProvider클래스의 인스턴스 메소드이며 주어진 URL에 대한 메타데이터를 가져오는 역할을 한다. 

reference : https://developer.apple.com/documentation/linkpresentation/lpmetadataprovider/3143321-startfetchingmetadata

LPMetadataProvider 인스턴스 당 한 번만 이 스타트패칭메타데이터 메소드를 호출해야 한다.

만약 한 LPMetadataProvider 인스턴스에 메타데이터를 여러 번 가져오려 하면 오류가 발생한다.

그리고 completion handler는 백그라운드 큐에서 실행되니 메인 큐에서 UI를 업데이트해줘야 한다.

completion handler가 리턴하면 리턴된 결과 LPLinkMetadata가 삭제된다.

 

여하튼 startFetchingMetadata(for: ,completionHandler: )을 통해 메타데이터를 completion handler를 통해 백그라운드 큐에서 LPLinkMetadata를 받는다.

 

여기까지는 메타데이터를 가져오는 작업을 했다.

 

이제 받은 LPLinkMetadata를 사용해보자.

공식 문서를 살펴보면 LPLinkMetadata는 URL에 대한 메타데이터를 가지는 객체다.

 reference : https://developer.apple.com/documentation/linkpresentation/lplinkmetadata

LPLinkMetadata는 LPMetadataProvider를 사용해 가져와진다.

 

사실 LPMetadataProvider가 인터넷에 접속해 작업을 수행하기 때문에 동일한 작업을 수행할 때마다 비효율적이다.

그렇기 때문에 LPLinkMetadata를 가능한 로컬에 캐시 하는 것이 좋다.

캐싱 처리 함으로써 똑같은 URL에 대해선 이전에 캐시 한 메타데이터를 가져와 사용하면 효율적으로 사용할 수 있다.

 

LPLinkMetadata는 NSSecureCoding으로 직렬화가 가능하다.

(안전함 : NSSecureCoding은 프로토콜이며 대체 공격을 막기 위한 방식으로 클래스 자체가 인코딩과 디코딩을 가능하게 함.) 

 

또한 LPLinkMetadata는 여러변수를 가지는데 타이틀 아이콘 이미지 비디오 모두 옵셔널이다.

  • 타이틀 title // Optional
  • 아이콘 icon // Optional
  • 이미지 image // Optional
  • 비디오 video // Optional

아까 위에서 옵셔널이 있다고 한 이유는 사이트가 지정하지 않은 경우도 있기 때문이다.

사이트가 지정하지 않은 경우 타이틀,아이콘,이미지,비디오가 없을 수 있기 때문에 옵셔널이다.

 

가져온 LPLinkMetadata 객체를 가지고 있지만 아직 보여주는 작업이 없다.

 

 

우리는 메타데이터를 보기좋게 (풍부하게) 표현해야한다.

LPLinkView를 사용하면 메타데이터를 쉽고 풍부하게 표현할 수 있다. 

 

LPLinkView는 LPLinkMetadata 객체를 가지고 만들 수 있다.

LPLinkView는 원래 크기를 갖는 뷰지만 제한적인 크기가 주어지면 사용하기에 이상적인 크기에 맞도록 줄어들고 늘어난다.

 

테이블뷰 셀의 contentView에 LPLinkView인스턴스인 linkView를 하위뷰로 추가해준다.

그리고 적절하게 사이즈를 맞춰주면 링크에 대한 풍부한 표현이 가능하게 된다.

 

내가 직접 사용해본 실행 결과는 이렇다.

확실히 URL을 그냥 제공하는 것보다 메타데이터를 사용해 풍부한 뷰를 제공함으로써 URL각각을 구별하기 쉽고 보기도 좋다.

 

이 프레임워크 칭찬해.

하필 레시피URL들로 해봐서.. 배고프다.  

 

references 

https://developer.apple.com/documentation/linkpresentation

https://developer.apple.com/videos/play/wwdc2019/262/

반응형

'공부 > WWDC' 카테고리의 다른 글

Apple 이벤트 2020  (0) 2020.09.23
WWDC2020 Become a Simulator Export  (0) 2020.08.12
WWDC2020 What's New in Swift  (0) 2020.06.30
WWDC2020 키노트 정리  (0) 2020.06.30
WWDC2019 Architecting Your App For Multiple Windows  (0) 2020.05.15