我看到很少有人触及这个主题,但我认为没有人提出 100% 有效的答案。
基本上,我希望能够将视频从我的 IOS 应用程序分享到 Instagram,而无需使用 UIActivityViewController。由于无法修改 UIActivityViewController 的 UI,因此我需要从头开始实现 Instagram 共享选项,即从我的应用程序调用 Instagram 应用程序。
我在 Stackoverflow 上发现,视频必须保存到图库中,然后才能通过 Insta 共享。这是我最终使用的代码:
func requestAuthorization(completion: @escaping () -> Void) {
if PHPhotoLibrary.authorizationStatus() == .notDetermined {
DispatchQueue.main.async {
completion()
}
} else if PHPhotoLibrary.authorizationStatus() == .authorized {
completion()
}
}
func saveVideoToAlbum(_ outputURL: URL, _ completion: ((String, Error?) -> Void)?) {
var localIdentifier: String = ""
requestAuthorization {
PHPhotoLibrary.shared().performChanges({
let request = PHAssetCreationRequest.forAsset()
localIdentifier = request.placeholderForCreatedAsset?.localIdentifier ?? ""
request.addResource(with: .video, fileURL: outputURL, options: nil)
}) { (result, error) in
DispatchQueue.main.async { [weak self] in
completion?(localIdentifier, error)
}
}
}
}
func testInsta(_ videoUrl: URL) {
saveVideoToAlbum(videoUrl) { localIdentifier, err in
let u = "instagram://library?LocalIdentifier=" + localIdentifier
let url = NSURL(string: u)!
if UIApplication.shared.canOpenURL(url as URL) {
UIApplication.shared.open(URL(string: u)!, options: [:], completionHandler: nil)
} else {
let urlStr = "https://itunes.apple.com/in/app/instagram/id389801252?mt=8"
if #available(iOS 10.0, *) {
UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(URL(string: urlStr)!)
}
}
}
}
虽然这段代码没有在我的应用程序范围内打开这个漂亮的 UI(就像 UIActivityViewController 那样),但它仍然可以完成这项工作。它会打开 Instagram,其中包含我准备编辑的视频。但是,只有当 Insta 具有对我的图库的完全访问权限时,它才会打开我的视频。否则,它只会向我显示它可以访问的图库中的最后一个资产。
所以我的问题是 - 如何直接从我的应用程序将内容分享到 Instagram,无论 Instagram 是否具有对图库的完全访问权限?与 UIActivityViewController 的方式相同。
我 100% 可以做我想做的事,但我正在努力寻找合适的文档来解释如何实现我想要的。如果有人已经解决了这个挑战,请分享您的发现。预先感谢您!
我确信这也是可能的,我会考虑解决方法,以便将视频保存在照片以外的其他位置,例如文件应用程序。
我没有任何使用 Instagram 的经验,所以我不确定它是否可以从文件应用程序获取媒体。
请问为什么 UIActivityViewController 不在桌子上?