2018年10月5日金曜日

Expoで画像や動画をInstagramのストーリーやフィードに投稿するためにはこうしたらいいよ的なお話

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

画像とか動画とかそういったアプリを作っているときに、ツイッターとかFacebookだったらpostのAPIがあるからシェアも簡単にできるわけだけど。
残念なことにInstagramはそういったAPIが用意されていないわけで。
(ビジネスAPIだとあるらしい)

けど昔からスキーマを使うことでできるようになるっていうのが有名だったり。
ということで今日はExpoで作成してるアプリの中で、画像とか動画をInstagramにシェアするにはこうしたらいいよ的なお話をば。

とりあえず流れとしてはこんな感じ。
1. FileSystemのドキュメントディレクトリ内に画像もしくは動画を保存する
2. カメラロールのパーミッションを確認する
3. CameraRoll.saveToCameraRoll()をして画像もしくは動画をカメラロールに保存する
4. 保存したらasset://としてカメラロールのパスをもらえるので、それをそのままLinkingで飛ばす

ってな感じ。
注意しておきたいところとしては、await FileSystem.downloadAsync(fileUri, filePath);のfilePathが以下のようになっているとアウト。
const filePath = `${FileSystem.documentDirectory}video/share-movie.mp4`;
video/というディレクトリがアプリ内のドキュメントディレクトリに存在しないので、その中に動画を入れているからダメっていう。
ちなみにすごくいやらしいのがこの際にgetInfoAsync()してもエラーとして出てこないで、{"isDirectory":0,"exists":0}として存在しないという言い方で出てくるっていう。
そのせいでそもそもダウンロードできないのか?とかでissue出して自己解決しましたということをやってしまったっていう。
もしディレクトリ内に入れたいならばFileSystem.makeDirectoryAsync()として先にディレクトリを作っておきましょう的な。

ってな感じでやってあげればInstagramがダウンロードされていればそのままストーリーかフィードにシェアする画面が表示される的なみたいな。
意外と情報がないし、ネイティブが使えるならばUIDocumentInteractionControllerでやっちゃうっていう手もあったり。

Adsense