【Swift】코피페로 할 수 있다! SDK를 사용하지 않고 SNS (Twitter/Facebook/Line/Mail)로 공유하는 방법 요약

이번에는 Facebook, Twitter, Line SDK를 사용하지 않는 && UIActivity(공유 버튼)를 사용하지 않고 Twitter, Facebook, Line, Mail에서 공유할 수 있는 장면을 상정합니다.

라이브러리 설치가 없으므로 copipe로 할 수 있습니다.
하지만 평소에는 UIActivity를 사용하고 있다고 생각하지만 ...

완성형


  • line
  • url 체계에서 LINE 앱을 전환하지만 여러 사용자에게 메모와 메시지에 게시 할 수 있습니다.
  • 공유하고 싶은 URL과 OGP 이미지가 메시지에 게시됩니다 (보기 힘들지만 ...).



  • twitter
  • actionsheet를 앱에서 열고 그대로 게시 할 수 있습니다



  • facebook
  • 트위터와 마찬가지로 actionsheet을 앱에서 열고 그대로 게시 할 수 있습니다.



  • mail
  • URL 체계에서 메일 앱으로 전환하여 특정 사용자에게 메일을 보낼 수 있습니다.




  • UIActivity는 이것


  • 이번에는 이것을 사용하지 않습니다.



  • Social 가져오기


    import UIKit
    import Social
    

    SNS를 열거해 둔다


    enum SNS: Int {
        case line = 1
        case twitter = 2
        case facebook = 3
        case mail = 4
    }
    

    공유하기


  • line과 mail은 URL 체계입니다
  • twitter와 facebook은 Social의 SLComposeViewController를 사용하고 있습니다.
  •     private func openURL(url: URL?) {
            guard let url = url else { return }
            if UIApplication.shared.canOpenURL(url) {
                if #available(iOS 10.0, *) {
                    UIApplication.shared.open(url, options: [:], completionHandler: nil)
                    } else {
                    UIApplication.shared.openURL(url)
                }
            }
        }
    
        private func shareSNS(sns: SNS) {
            let shareURL = "https://hogehogehogeho.com"
            switch sns {
            case .facebook:
                guard let composeViewController: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook) else { return }
                composeViewController.setInitialText(shareURL)
                self.present(composeViewController, animated: true, completion: nil)
            case .line:
                guard let scheme: String = "line://msg/text/\(shareURL)".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { return }
                self.openURL(url: URL(string: scheme))
            case .mail:
                guard let string = "mailto:[email protected]?body=\(shareURL)".addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) else { return }
                self.openURL(url: URL(string: string))
            case .twitter:
                guard let vc = SLComposeViewController(forServiceType:SLServiceTypeTwitter) else { return }
                vc.setInitialText(shareURL)
                self.present(vc, animated: true, completion: nil)
            }
        }
    

    요약


  • 조금 강한 방법일지도 모르지만, 목적으로 한 UIActivityViewController 를 사용하지 않고 공유를 할 수 있었습니다
  • 좋은 웹페이지 즐겨찾기