Instagram
iOS
Swift

iOSで動画をInstagram Storyにシェアする

iOSで、URL SCHEMEを使ってInstagramに動画をシェアする方法です。

やること

動画を録画できる機能を持つアプリを作っていると、Instagram Storyにシームレスにシェアできるアプリをつくりたいですよね。 

GIFイメージ-CF38FB296D55-1.gif

上はPemojiのスクショです。この実装のためのメモを残します。

前提

InstagramにURL Schemeを使って動画をシェアするためには一旦動画をカメラロールに保存しなければならない。

流れ

Photosフレームワークで動画を保存し、localIdentifierを取得

localIdentifierを使ってInstagramのurl schemeを作る

遷移する

コード

import Photos

let url = URL(fileURLWithPath: path)
var localId: String?

PHPhotoLibrary.shared().performChanges({
    let request = PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
    localId = request?.placeholderForCreatedAsset?.localIdentifier
}, completionHandler: { success, error in

    if let localId = localId {
        shareToInstagram(localIdentifier: localId)
    }
})

private func shareToInstagram(localIdentifier: String) {
    let urlString = "instagram://library?LocalIdentifier=" + localIdentifier
    guard let url = URL(string: encoded) else {
        return
    }
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

ポイント

  • localIdentifierを使ってカメラロールに保存した動画を一意に判別できるようにすること
  • PhotoフレームワークでcreationDateで最新とか取ったりすると、古い動画をシェアしたい時にうまくいかない
  • stackoverflowにあるように、 instagram://library?AssetPath= は使わない方がいい

参考

https://stackoverflow.com/questions/34226433/instagram-hooks-pre-select-media-issue