[iOS] Share Panel

leeyoung·2022년 9월 28일

서론

iOS Share Panel을 보면 url에서 메타 정보가 나올 때도 있고 이미지 preview가 보일 때도 있고 텍스트가 보일 때도 있다.

이렇게 Share Sheet 타이틀과 preview 이미지가 각 타입마다 다른 것을 볼 수 있다.

어떻게 하면 iOS에서 Share Panel을 열고 메타정보가 필요한 경우 메타 정보를 얻어올 수 있는지를 알아보고자 한다.

UIActivityViewController

UIActivityViewController를 이용하면 Share panel을 이용하여 시스템에서 제공하는 이메일, SMS 이나 데이터에 형식에 따라 지원하는 앱들로도 공유 가능하다.

(iPad의 경우 popover 형식으로 나타난다)

var shareObject = [Any]()
let sharedText: String = "Text Share"
let sharedImage: UIImage = UIImage(named: "image.png")

shareObject.append(shareText)
shareObject.append(sharedImage)

let activityViewController = UIActivityViewController(activityItems : shareObject, applicationActivities: nil)
// 아이패드의 경우에만 사용될 코드
activityViewController.popoverPresentationController?.sourceView = self.view
activityViewController.popoverPresentationController?.sourceRect = self.view.bounds 

// controller 닫힌 이후 완료 핸들러 지정
activityViewController.completionWithItemsHandler = { (activity, success, items, error) in
    if success {
        //  성공시
   }  else  {
        // 실패시
   }
}

self.present(activityViewController, animated: true, completion: nil)

activityViewControllerLinkMetadata

  • 메타데이터 정보를 얻어올 수 있다
  • 다만, 타이틀과 이미지가 뜨는데 시간이 다를 수 있다.
@available(iOS 13.0, *)
func activityViewControllerLinkMetadata(_: UIActivityViewController) -> LPLinkMetadata? {
   return self.metadata
}

/// 커스텀하는 경우
@available(iOS 13.0, *)
func activityViewControllerLinkMetadata(_: UIActivityViewController) -> LPLinkMetadata? {
   let metadata = LPLinkMetadata()
   metadata.originalURL = shareURL
   metadata.url = shareURL
   metadata.title = "My custom title"
   metadata.imageProvider = NSItemProvider(contentsOf: imageURL)
   return metadata
}

참고

https://hyesunzzang.tistory.com/201

https://developer.apple.com/documentation/uikit/uiactivityitemsource/3144571-activityviewcontrollerlinkmetada

0개의 댓글