7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

ライブラリのインストールがないのでコピペでできます。
しかしながら、普段はUIActivityを使っているかと思いますが...笑

完成形

  • line

    • urlスキームでLINEアプリの遷移しますが、複数ユーザーにノートとメッセージに投稿することができます。
    • シェアしたいURLとOGP画像がmessageにpostされます(みにくいですが...)

    IMG_9119.PNG

  • twitter

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

    IMG_9116.PNG

  • facebook

    • twitterと同様にactionsheetがアプリ上で開きそのまま投稿できます

    IMG_9117.PNG

  • mail

    • URLスキームでメールアプリに遷移し特定のユーザーにメールを送信することができます。

    IMG_9118.PNG

UIActivityはこれ

  • 今回はこれは使いません。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f343930302f64326333623935662d373963632d643861662d376164642d3439623238633962656234632e706e67.png

Socialをインポートする

.swift
import UIKit
import Social

SNSを列挙しておく

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

シェアさせる

  • lineとmailは、URLスキームです
  • twitterとfacebookはSocialのSLComposeViewControllerを使用しています。
.swift
    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を使わずにシェアをすることができました
7
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?