Swift: iOS アプリに SNS (Twitter, Facebook) 共有ボタンを実装する

Swift でアプリに SNS 共有ボタンを実装したいと思います。

アプリのユーザーがどれだけ SNS 共有機能を使ってくれるかは、アプリ自体の魅力や機能にもよりますが、どんな種類のアプリであれ、実装しておいたほうが好ましい機能ではあります。

今回 SNS 共有は Social フレームワークを使用し実装するので、ボタンのクリックイベントのメソッドに数行のコードを記述するだけで、簡単に Twitter や Facebook で情報を共有することが出来ます。

■目次

  • Social.framework のインポート
  • UIButton を配置する
  • Twitter 共有のメソッドを記述する
  • Facebook 共有のメソッドを記述する

■詳細説明

Social.framework のインポート

UIViewController に Social フレームワークをインポートします。

ViewController.swift

import UIKit
import Social

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

UIButton を配置する

UIViewController の viewDidLoad で Twitter と Facebook という名称の UIButton を配置し各ボタンにメソッドを定義します。

ここでは viewDidLoad に直接 UIButton をコードで定義・配置していますが、Storyboard と IBOutlet を使っても構いません。

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)
        
    }
}

Twitter 共有のメソッドを記述する

ViewController に viewDidLoad 内で twitter ボタンのアクションに指定した onClickTweetButton メソッドを定義します。

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)
}

Facebook 共有のメソッドを記述する

ViewController に viewDidLoad 内で facebook ボタンのアクションに指定した onClickFacebookButton メソッドを定義します。

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)
}

ViewController 全体のコードは以下のようになります。

ViewController.swift

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)
    }
    
}

■結果

アプリをビルドし動作を確認します。

swift-sns-share-implement01

twitter タップ時の共有画面。

swift-sns-share-implement02

facebook タップ時の共有画面。

swift-sns-share-implement03

もし、ボタンをタップしてもデバイスで twitter や facebook のアカウントが設定されていなければ警告が出ます。

swift-sns-share-implement04

■まとめ

今回のサンプルコードではテキストを SNS 共有しましたが、アプリ内で画像を取得し、画像や URL のリンクテキスト等も共有可能です。

アプリの目的に応じた情報を共有する機能を実装することで、より多くのユーザーにアプリの存在をアピールできるできるのではないでしょうか。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents