iOSで、URL SCHEMEを使ってInstagramに動画をシェアする方法です。
やること
動画を録画できる機能を持つアプリを作っていると、Instagram Storyにシームレスにシェアできるアプリをつくりたいですよね。
上は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=
は使わない方がいい
参考