Swift でアプリに SNS 共有ボタンを実装したいと思います。
アプリのユーザーがどれだけ SNS 共有機能を使ってくれるかは、アプリ自体の魅力や機能にもよりますが、どんな種類のアプリであれ、実装しておいたほうが好ましい機能ではあります。
今回 SNS 共有は Social フレームワークを使用し実装するので、ボタンのクリックイベントのメソッドに数行のコードを記述するだけで、簡単に Twitter や Facebook で情報を共有することが出来ます。
■目次
- Social.framework のインポート
- UIButton を配置する
- Twitter 共有のメソッドを記述する
- Facebook 共有のメソッドを記述する
■詳細説明
Social.framework のインポート
UIViewController に Social フレームワークをインポートします。
ViewController.swift
[code]
import UIKit
import Social
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
[/code]
UIButton を配置する
UIViewController の viewDidLoad で Twitter と Facebook という名称の UIButton を配置し各ボタンにメソッドを定義します。
ここでは viewDidLoad に直接 UIButton をコードで定義・配置していますが、Storyboard と IBOutlet を使っても構いません。
[code]
import UIKit
import Social
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
println(“viewDidLoad”)
var tweetButton: UIButton = UIButton()
var facebookButton: UIButton = UIButton()
tweetButton.setTitle(“Twitter”, forState: .Normal)
tweetButton.frame = CGRectMake(0, 0, 300, 50)
tweetButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
tweetButton.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
tweetButton.layer.position = CGPoint(x: self.view.frame.midX, y: self.view.frame.midY – 30)
tweetButton.addTarget(self, action: “onClickTweetButton:”, forControlEvents:.TouchUpInside)
facebookButton.setTitle(“Facebook”, forState: .Normal)
facebookButton.frame = CGRectMake(0, 0, 300, 50)
facebookButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
facebookButton.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
facebookButton.layer.position = CGPoint(x: self.view.frame.midX, y: self.view.frame.midY + 30)
facebookButton.addTarget(self, action: “onClickFacebookButton:”, forControlEvents:.TouchUpInside)
self.view.addSubview(tweetButton)
self.view.addSubview(facebookButton)
}
}
[/code]
Twitter 共有のメソッドを記述する
ViewController に viewDidLoad 内で twitter ボタンのアクションに指定した onClickTweetButton メソッドを定義します。
[code]
func onClickTweetButton(sender: UIButton) {
let text = “twitter share text”
let composeViewController: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeTwitter)!
composeViewController.setInitialText(text)
self.presentViewController(composeViewController, animated: true, completion: nil)
}
[/code]
Facebook 共有のメソッドを記述する
ViewController に viewDidLoad 内で facebook ボタンのアクションに指定した onClickFacebookButton メソッドを定義します。
[code]
func onClickFacebookButton(sender: UIButton) {
let text = “facebook share text”
let composeViewController: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)!
composeViewController.setInitialText(text)
self.presentViewController(composeViewController, animated: true, completion: nil)
}
[/code]
ViewController 全体のコードは以下のようになります。
ViewController.swift
[code]
import UIKit
import Social
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
println(“viewDidLoad”)
var tweetButton: UIButton = UIButton()
var facebookButton: UIButton = UIButton()
tweetButton.setTitle(“Twitter”, forState: .Normal)
tweetButton.frame = CGRectMake(0, 0, 300, 50)
tweetButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
tweetButton.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
tweetButton.layer.position = CGPoint(x: self.view.frame.midX, y: self.view.frame.midY – 30)
tweetButton.addTarget(self, action: “onClickTweetButton:”, forControlEvents:.TouchUpInside)
facebookButton.setTitle(“Facebook”, forState: .Normal)
facebookButton.frame = CGRectMake(0, 0, 300, 50)
facebookButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
facebookButton.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
facebookButton.layer.position = CGPoint(x: self.view.frame.midX, y: self.view.frame.midY + 30)
facebookButton.addTarget(self, action: “onClickFacebookButton:”, forControlEvents:.TouchUpInside)
self.view.addSubview(tweetButton)
self.view.addSubview(facebookButton)
}
func onClickTweetButton(sender: UIButton) {
let text = “twitter share text”
let composeViewController: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeTwitter)!
composeViewController.setInitialText(text)
self.presentViewController(composeViewController, animated: true, completion: nil)
}
func onClickFacebookButton(sender: UIButton) {
let text = “facebook share text”
let composeViewController: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)!
composeViewController.setInitialText(text)
self.presentViewController(composeViewController, animated: true, completion: nil)
}
}
[/code]
■結果
アプリをビルドし動作を確認します。
twitter タップ時の共有画面。
facebook タップ時の共有画面。
もし、ボタンをタップしてもデバイスで twitter や facebook のアカウントが設定されていなければ警告が出ます。
■まとめ
今回のサンプルコードではテキストを SNS 共有しましたが、アプリ内で画像を取得し、画像や URL のリンクテキスト等も共有可能です。
アプリの目的に応じた情報を共有する機能を実装することで、より多くのユーザーにアプリの存在をアピールできるできるのではないでしょうか。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。




