Posted at

【Swift】コピペでできる!SDKを使わずにSNS(Twitter/Facebook/Line/Mail)でシェアさせる方法まとめ

More than 1 year has passed since last update.

今回は、facebookやtwitter、LineのSDKを使わない && UIActivity(共有ボタン)を使わないで、Twitter・Facebook・Line・Mailでシェアできるような場面を想定します。

ライブラリのインストールがないのでコピペでできます。

しかしながら、普段はUIActivityを使っているかと思いますが...笑


完成形


  • line


    • urlスキームでLINEアプリの遷移しますが、複数ユーザーにノートとメッセージに投稿することができます。

    • シェアしたいURLとOGP画像がmessageにpostされます(みにくいですが...)




  • twitter


    • actionsheetがアプリ上で開きそのまま投稿できます




  • facebook


    • twitterと同様に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:test@test.com?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を使わずにシェアをすることができました