Документы Facebook SDK показывают, что вы можете использовать URL для imagePickerController для передачи видео из своего приложения на Facebook: https://developers.facebook.com/docs/sharing/ios
Однако я хотел бы иметь возможность поделиться видео на Facebookиз моего приложения, не заходя в средство выбора изображений.Бумеранг делает это, сначала сохраняя видео в ролике пользователя, а затем отображая диалоговое окно, чтобы поделиться видео.Выглядит целесообразным сначала сохранить видео и получить этот URL, чтобы иметь возможность поделиться видео в Facebook, в отличие от фотографий.
Я могу нормально сохранить видео в своей библиотеке фотографий, но не могу заставить мое приложение переключиться на Facebook, чтобы просмотреть диалоговое окно обмена.В моей консоли появляются два сообщения «TIC Read Status», но ошибок нет.
Для большей ясности в том, что я делаю, я сохраняю видео в своей библиотеке, а после завершения сортирую носитель рулона камеры по убыванию по дате создания и извлекаю первый объект.Затем я преобразую этот ресурс в URL-адрес, который должен использоваться FBSDKShareVideo.
Мой URL выглядит как "file: ///var/mobile/Media/DCIM/129APPLE/IMG_9515.MP4"
CustomPhotoAlbum.sharedInstance.save(URL: self.fileURL, completion: {
DispatchQueue.main.async(execute: {
print(self.fileURL)
self.enableButtons(enabled:true)
self.activityTextStatus?.remove()
self.timedLabel.setLabel("Video saved.", view:self.view)
})
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: self.fileURL)
}) { saved, error in
if saved {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let fetchResult = PHAsset.fetchAssets(with: .video, options: fetchOptions).firstObject
PHImageManager().requestAVAsset(forVideo: fetchResult!, options: nil, resultHandler: { (avurlAsset, audioMix, dict) in
let newObj = avurlAsset as! AVURLAsset
let videoURL:URL = newObj.url
print(videoURL)
let photo = self.uiImages[0]
let sharePhoto = FBSDKSharePhoto()
sharePhoto.image = photo
let filePath = self.fileURL
// get size of video in bytes
do {
var fileSize : UInt64
let attr = try FileManager.default.attributesOfItem(atPath: (filePath?.path)!)
fileSize = attr[FileAttributeKey.size] as! UInt64
print(fileSize)
} catch {
print("Error: \(error)")
}
let shareVideo : FBSDKShareVideo = FBSDKShareVideo(videoURL: videoURL, previewPhoto: sharePhoto)
let content : FBSDKShareVideoContent = FBSDKShareVideoContent()
content.video = shareVideo
let shareDialog: FBSDKShareDialog = FBSDKShareDialog()
shareDialog.shareContent = content
shareDialog.mode = .native
shareDialog.show()
})
}
}
})