iOS Share Panel을 보면 url에서 메타 정보가 나올 때도 있고 이미지 preview가 보일 때도 있고 텍스트가 보일 때도 있다.
이렇게 Share Sheet 타이틀과 preview 이미지가 각 타입마다 다른 것을 볼 수 있다.
어떻게 하면 iOS에서 Share Panel을 열고 메타정보가 필요한 경우 메타 정보를 얻어올 수 있는지를 알아보고자 한다.
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)
@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
}