IOS FacebookShare Возвращается ошибка «зарезервировано»

Я пытался искать, но не смог найти ответ. Я написал приложение и пытаюсь поделиться контентом с Facebook. По сути, я хотел бы поделиться URL-адресом и, возможно, цитатой или названием.

Я продолжаю получать сообщение об ошибке «зарезервировано», но я не уверен, что это значит и как это исправить. Любая помощь будет здорово!

func fbClick() {

    let content = LinkShareContent(url: URL(string: "www.google.com")!)
    showShareDialog(content, mode: .native)

}

func showShareDialog<C: ContentProtocol> (_ content: C, mode: ShareDialogMode = .automatic) {
    let dialog = ShareDialog(content: content)
    dialog.presentingViewController = self
    dialog.mode = mode

    do {
        try dialog.show()
    } catch (let error) {
        self.view.makeToast("Invalid share content. Failed to present share dialog with error \(error)", duration: 3.0, position: .top)
    }
}

person Spartakus    schedule 06.11.2017    source источник


Ответы (2)


Догадаться.

Эта линия...

let content = LinkShareContent(url: URL(string: "www.google.com")!)

Должно было быть так...

let content = LinkShareContent(url: NSURL(string: "https://www.google.com")! as URL)

или вот так

let content = LinkShareContent(url: NSURL(string: "https://www.google.com")! as URL, quote: quote)
person Spartakus    schedule 30.11.2017
comment
Просто примечание: у меня такая же зарезервированная ошибка с использованием VideoShareContent и действительного уже определенного объекта URL. Я попробовал ваше решение NSURL, но оно такое же. Так что этот ответ не объясняет, что это за зарезервированная ошибка. - person ddp; 05.02.2018
comment
Тогда я еще не знал, но теперь знаю немного больше. Это означает, что содержание не соответствует действительности. Я думаю, это все равно, что пытаться вычислить строку. Я мало что сделал с VideoShareContent, но я бы попробовал несколько форматов видео. Я почти уверен, что VideoShareContent является URL-адресом некоторого локального местоположения, например, в памяти, а не URL-адресом веб-сайта. Я говорю это на всякий случай, если вы так подумали. - person Spartakus; 10.03.2018
comment
В качестве дополнительной информации я пошел дальше «зарезервированной» ошибки, добавив свое видео в фото / видео галерею, вернув новый URL-адрес (из галереи) и Messenger (или Facebook) с открытым концом. - person ddp; 10.03.2018
comment
Но видео не загрузилось в мессенджере (только белое поле вместо миниатюры) и выдало мне ошибку (проверьте подключение к Интернету... LOL), когда я попытался отправить его. - person ddp; 10.03.2018
comment
@ddp попробуйте изменить режим. Это может быть так, как это представлено. - person Spartakus; 11.03.2018

Была такая же ошибка reserved, но при использовании VideoShareContent. Потратил 5 часов, чтобы найти проблему и, наконец, нашел. Очень надеюсь, что кто-то тоже найдет это полезным.

Решение: когда вы получаете url вашего видео из параметра info из метода делегата UIImagePickerController, убедитесь, что вы используете ключ "UIImagePickerControllerReferenceURL".

Пример:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {
    picker.dismiss(animated: true)
    if let videoURL = info["UIImagePickerControllerReferenceURL"] as? URL {
        let video = Video(url: videoURL)
        let content = VideoShareContent(video: video)
        do {
            try ShareDialog.show(from: self, content: content)
        } catch {
            print(error)
        }
    }
}

Дополнительная информация: изначально я не использовал этот ключ "UIImagePickerControllerReferenceURL". Почему: это устарело. Согласно Apple, вместо этого вы должны использовать UIImagePickerControllerPHAsset. Но URL-адрес оттуда также возвращает ошибку reserved. Еще одна попытка заключалась в использовании ключа "UIImagePickerControllerMediaURL", но она также не увенчалась успехом.

person Tung Fam    schedule 20.05.2018