こんにちは。うっちーです。
ここ1ヶ月、Swift で iPhoneアプリの開発を行っていました。
初めての言語で戸惑うこともありましたが、Objective-C に比べたら全然わかりやすかったです。
今回は、「Swift」で調べてもなかなかサンプルコードがなかった、Instagram と LINE への画像の投稿方法を備忘録として書こうと思います。
Objective-C ならあったんですけどね。。。Swift での需要はまだ少ないのかな。
それとも書き残しておくほどのことでもなかったのかな。。。
それとも世間の人たちは Objective-C <=> Swift の脳内変換が容易なのかしら。。。ぶつぶつ。。。
環境は XCode 6.3.1 です。
今時のアプリはSNS投稿機能が必須だよね!
というわけで、いまやSNSへの連携は必須機能と言えると思います。
Swift(iOS)ではFacebookとTwitterへの投稿機能が標準で用意されています。
が、Instagram と LINE は直接投稿する API がないので、投稿したい画像を対象のアプリに渡して起動させる、という流れになります。
SwiftでInstagramに投稿する
画像付きでInstagramを起動させるには、アクションシート(って言うんだっけ?)に表示されたInstagramアイコンをタップして開きます。
このアクションシートを UIDocumentInteractionController で表示します。
それから、画像を渡すのに画像のパスが必要になります。
しかも拡張子は『.igo』じゃないと他の画像を扱えるアプリが選択肢として出てきてしまうみたいです。
こんな感じで Documents の配下にでも作ります。
1 2 3 4 5 |
var imageData: NSData = UIImageJPEGRepresentation(UIImage(named: "logo", 0.75) var filePath: String = NSHomeDirectory().stringByAppendingPathComponent("Documents/insta.igo") imageData.writeToFile(filePath, atomically: true) |
アクションシートを表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var interactionController: UIDocumentInteractionController! var filePath: String = NSHomeDirectory().stringByAppendingPathComponent("Documents/insta.igo") var fileUrl: NSURL = NSURL(fileURLWithPath: filePath)! interactionController = UIDocumentInteractionController(URL: fileUrl) interactionController.UTI = "com.instagram.exclusivegram" interactionController.delegate = self var present: Bool = self.interactionController.presentOpenInMenuFromRect(self.view.frame, inView: self.view, animated: true) |
これで Instagram のアイコンが表示されるので、タップすると渡した画像と共に Instagramが起動します。
あとは Instagram 上で操作して投稿します。
SwiftでLINEに投稿する
次はLINEです。
こちらでも使用方法が紹介されています。
最近、私のお友達は Facebook より LINE のタイムラインに投稿しているようで、LINE のタイムラインをチェックしていない私はすっかり取り残されております。
そもそも Facebook もチェックするのやめたんですけどね。私。
LINE の場合は、画像を UIPasteboard にセットして、その Pasteboard.name を URL につなげて UIApplication.sharedApplication の openURL メソッドで LINE アプリを起動させます。
1 2 3 4 5 6 7 |
var pastBoard: UIPasteboard = UIPasteboard.generalPasteboard() pastBoard.setData(UIImageJPEGRepresentation(UIImage(named: "logo"), 0.75), forPasteboardType: "public.png") var lineUrlString: String = String(format: "line://msg/image/%@", pastBoard.name) UIApplication.sharedApplication().openURL(NSURL(string: lineUrlString)!) |
開くとこんな感じになります。
個人・グループ・タイムライン、どれでも選択が可能です。
あとは送り先を選択して投稿します。
簡単ですね。
私は LINE 投稿で画像を UIPasteboard にセットするところで、forPasteboardType を “line.png” としていたせいでハマりましたが。。。
なにやらこの第2引数は任意の値は定義しないといけないみたいで、今回は面倒なので上書きされても問題ないので、あらかじめ定義されている “public” を使いました。
こちらに詳細が書かれています。ありがとうございました。
まとめ
Instagram と LINE は iOS Simulator にインストールすることができないので、実機じゃないと動作検証できないのが難点ですね。
他にもSNSサービスはたくさんあるので、それらに対応する必要も出てくるかもしれません。
この二つの方法で、ある程度は対応できるんじゃないかなと思います。検証してないけど。
そもそも SNS なんてリア充が使うものであって、私みたいな引きこもり気味の働くお母さんはそんな暇なんて。。。ごにょごにょ。。。
そんな感じでバタバタしている今日この頃です。
今回のソース、GitHubにあげておきます。
参考になれば幸いです。