Я хочу иметь возможность публиковать видео на Facebook так, как это делает Бумеранг - PullRequest
0 голосов
/ 05 июня 2018

Документы 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()

            })

        }
    }

})
...