カテゴリー: iOS

Swiftの「UIActivityViewController」でTwitterにだけハッシュタグをつけたい!

はじめに

こんにちわ、nukkyです。
今回はSNSやメール連携したいときに便利な
「UIActivityViewController」を紹介したいと思います。
実は「UIActivityViewController」でのTwitter連携時のみに
ハッシュタグをつけたかったのですが
これが意外と難航したのでこちらも合わせて紹介したいと思います。

実装

まずはやってみよう

UIActivityViewControllerの使い方は実に簡単
・[Any]を用意してUIActivityViewControllerをインスタンス化
・presentViewControllerで呼び出す
以上です。
本当に最低限のコードだとこんな感じ

let text = "text"
let items = 
let activeViewCotntroller = UIActivityViewController(activityItems: items,
                                                     applicationActivities: nil)
present(activeViewCotntroller, animated: true, completion: nil)

第一引数のactivityItemsですがこちらはAnyの配列が渡せます。
渡せる情報としては以下の三つになります。
・テキスト(String)
・URL(URL)
・画像(UIImage)
つまりURLや画像を渡したい場合は、items変数にURLやUIImageも一緒に入れてやればいいだけです。
さっきのコードにURLと画像を追加で渡す場合以下の様になります。

let text = "text"
let sampleUrl = NSURL(string: "http://www.apple.com/")!
let image = UIImage(named: "apple")!
let items =  as [Any]
let activeViewCotntroller = UIActivityViewController(activityItems: items,
                                                     applicationActivities: nil)
present(activeViewCotntroller, animated: true, completion: nil)

ただし連携先によっては渡した情報が表示されない(表示できない)こともあるので注意してください。

Twitter連携時のみにハッシュタグをつけたい

ここでTwitterのみハッシュタグをつけるやり方を紹介したいと思います。
使用するのは「UIActivityItemSource」です。
こちらはprotocolになっており、「UIActivityViewController」で
連携先を選択した際になにを選んだか確認できます。
とりあえず今回はテキスト(String)のパターンのみを考えて以下を作成しました。

import UIKit

class ActivityText: NSObject, UIActivityItemSource {
    static let HASH_TAG = " #hoge"
    var text: String = ""
    
    init(text:String) {
        self.text = text
    }
    
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return text
    }
    
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
        if activityType == UIActivityType.postToTwitter {
            return text + ActivityText.HASH_TAG
        }
        return text
    }
}

単純に「activityType」からTwitterかどうかを判断し、
Twitterだった場合、returnにハッシュタグを付与しています。
上記の「UIActivityViewController」のサンプルコードの場合
以下の様に呼び出します。

let text = "text"
let items = [ActivityText(text: text)]
let activeViewCotntroller = UIActivityViewController(activityItems: items,
                                                     applicationActivities: nil)
present(activeViewCotntroller, animated: true, completion: nil)

これでTwitterのみハッシュタグをつけることができました!

 

さいごに

「UIActivityViewController」はものすごく簡単に実装できるので
ライトなアプリであればかなりオススメです。
今回はTwitterに対する特殊なアクションを組み込みましたが
このやり方を応用すれば色々できるかと思うので、
誰かのお役にたてれば嬉しいです。

nukky

コメントを見る

    • コメントありがとうございます!
      FacebookはアプリからデフォルトのTextを入れてはダメというポリシーがあるようなので、Textは渡せない(渡さない)と考えたほうが良さそうです。
      ただ、画像の共有とハッシュタグの付与(ハッシュタグの付与は一つのみ)は可能なので以下のソースでそれらが可能です。

      let image:UIImage = UIImage(named: "hoge")!
      let text = "#hoge"
      let items: [Any] = [image,text]
      let activeViewCotntroller = UIActivityViewController(activityItems: items,
                                                           applicationActivities: nil)
      present(activeViewCotntroller, animated: true, completion: nil)
      
シェア
執筆者:
nukky
タグ: Swift

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

2週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

4週間 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前