Edited at

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