LoginSignup
37
27

More than 5 years have passed since last update.

UIActivityViewControllerでSNSアプリを判別する

Posted at

開発しているアプリからテキストや画像を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に設定しないとアプリの選択もできないので注意。

37
27
0

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
37
27