[iOS] Share Panel

leeyoung·2022년 9월 28일
0

서론

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개의 댓글