LoginSignup
11
6

More than 5 years have passed since last update.

iOS[Swift]でURL Schemeを使ってInstagramのStoriesへの投稿をする!

Last updated at Posted at 2018-04-27

やりたいこと

stories-sample.gif

  • アプリ内で画像を生成または撮影
  • URL SchemeでInstagarmのアプリに飛ばして
  • Storiesに投稿させる

これをやりたいです。

どうやるのか

どうやってやるのかな。と思って、
Instagram developerのサイトなんかを見てみたのですが、いいかんじのものがみつからず...
https://www.instagram.com/developer/mobile-sharing/iphone-hooks/

ちょっと探していくうちにこんな記事を発見
http://www.anthrgrnwrld.net/entry/2016/10/07/230225

instagram://library?LocalIdentifier=

っていうSchemeでイケるのではないかということが判明😙

実装して見る

こういうシーンほとんどないと思うのですが、今回はさくっと実装したかったので、

  • アプリ内で画像を選択
  • その画像を持って
  • Instagramの投稿画面に遷移

こんな感じで実装することに。

やること

画像を選択させちゃう

UINavigationControllerDelegateUIImagePickerControllerDelegate が必要。
※RxSwiftつかってるよう

let album = UIImagePickerController()

centerButton.rx.tap

            .asObservable()

            .subscribe { _ in

                self.album.delegate = self

                self.album.sourceType = .photoLibrary

                self.present(self.album, animated: true, completion: nil)

            }

            .disposed(by: disposeBag)

やっていることは鬼シンプル。これでまずカメラロールをさくっと開くよ。

選択が終わったらどうしようか

画像の選択が終わったらどうするかの処理をかくよ

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        guard let linkURL = info[UIImagePickerControllerReferenceURL] as? URL else { return }

        guard let openURL = URL(string: "instagram://library?LocalIdentifier=\(linkURL.absoluteString)") else { return }

        picker.dismiss(animated: true, completion: {

            if UIApplication.shared.canOpenURL(openURL) {

                UIApplication.shared.open(openURL, options: [:], completionHandler: nil)

            } else {

                print("instagramいれなきゃだめだよそりゃ")

            }

        })

    }

これがなにをやってるかというと、

  • 選択された画像に関するデータがはいっている info というDictionaryから、UIImagePickerControllerReferenceURL のvalueを取り出す
  • URL Schemeを用意(パラメータに先程取得した UIImagePickerControllerReferenceURL をぶちこむ)
  • openURL していよいよクライマックス!

という感じでい。

ちなみに、CFBundleURLTypesinstagram を追加しないと遷移できないよ!
あと、いまはめんどくさかったから、UIImagePickerControllerReferenceURL を取ってきちゃったけど、これがdeprecatedみたいだから、本当はPhotos.frameworkをごにょらないとだめ!

11
6
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
11
6