UIActivityViewControllerでSNSアプリを判別する
PICK UP POST

UIActivityViewControllerでSNSアプリを判別する

開発しているアプリからテキストや画像をSNSにシェアをする時に使う
UIActivityViewControllerについて書きます。
今回はふざけません。絶対にふざけません。

UIActivityViewControllerの使い方

// StringとUIImageを配列で設定
let activityItems: [Any] = ["シェア", image]

let activityVc = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
present(activityVc, animated: true, completion: {

})

のようになります。
こういうのです。

しかし
Facebookはテキストのみやテキスト+画像を受け付けません。

UIActivityItemSourceを使う

例えば
Facebookの場合は画像のみシェア、Twitterの場合テキストのみシェアしたい。
そういう時はUIActivityItemSourceを使います。

class ActivityItemSorce:NSObject, UIActivityItemSource {
    var messsage: String!
    var image: UIImage!
    
    init(messsage: String, image: UIImage) {
        self.messsage = messsage
        self.image = image
    }
    
    // デフォルトのアイテム
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return messsage
    }
    
    // アプリ選択時に呼ばれる
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
        
        switch activityType {
        case .postToFacebook:
            return image
        case .postToTwitter:
            return "Twitter"
        default:
            return messsage
        }
    }
}

UIActivityViewControllerのactivityItemsの設定は以下にようになります。

let activityItems: [Any] = [ActivityItemSorce(messsage: "シェア", image: image!)]
        
let activityVc = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
present(activityVc, animated: true, completion: {

})

InstagramやLINEの場合はどうする?

activityType.rawValueを使います。

func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
	switch activityType.rawValue {
	case "com.burbn.instagram.shareextension":
		return "Instagram"
	case "jp.naver.line.Share":
		return "LINE"
	default:
		return messsage
	}
}

Instagramは画像のみをactivityItemに設定しないとアプリの選択もできないので注意。

TAG

  • このエントリーをはてなブックマークに追加
takano
takano takano

素晴らしいアプリを開発して世の中をもっとハッピーにしたい! ビール大好き!卓球大好き!音楽大好き! 最近は子供とおかあさんといっしょを見てるせいで「ブンバボーン」の脳内再生が止まりません。