XCODE / IOS - Поделиться через UIDocumentInteractionController

Мне не удалось поделиться чем-либо через «UIDocumentInteractionController», так как я прошел почти все руководства и онлайн-помощь, я хочу найти решение:

Это код, который я использую:

    let fileName = "banner_1"
    let filePath = Bundle.main.path(forResource: fileName, ofType: "jpg")!
    let urlData = URL.init(fileURLWithPath: filePath)
    let nsData = NSData(contentsOf: urlData)

    let newFileName = "banner_1.jpg"
    let newFilePath = "\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/\(newFileName)"
    nsData?.write(toFile: newFilePath, atomically: true)
    let newUrlData = URL.init(fileURLWithPath: newFilePath)

    documentController?.url = urlData // or newUrlData
    documentController?.uti = "net.whatsapp.image"
    documentController?.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true)

Каждый раз, когда я нажимаю одну плитку меню обмена для WhatsApp или мессенджера, ничего не происходит, и у меня появляется этот журнал ошибок:

2018-02-02 19: 56: 31.293849-0300 myapp [748: 116227] [core] SLComposeViewController initWithExtension: {id = net.whatsapp.WhatsApp.ShareExtension} requestedServiceType: (null)

2018-02-02 19: 56: 31.296021-0300 myapp [748: 116227] [core] SLComposeViewController addExtensionItem: - userInfo: {NSExtensionItemAttachmentsKey = ("{types = (\ n \" public.jpeg \ ", \ n \" public.file-url \ "\ n)}"); }

2018-02-02 19: 56: 31.883007-0300 myapp [748: 116227] [core] viewWillAppear

2018-02-02 19: 56: 31.883240-0300 myapp [748: 116227] [core] SLComposeViewController, включая 1 явный NSExtensionItems

2018-02-02 19: 56: 31.883311-0300 myapp [748: 116227] [core] SLComposeViewController собирается создать экземпляр контроллера удаленного представления с массивом из 1 NSExtensionItems

2018-02-02 19:56: 31.886583-0300 myapp [748: 116227] [core] viewDidAppear

2018-02-02 19: 56: 31.989725-0300 myapp [748: 116362] [ops] Ошибка подключения концентратора Ошибка Домен = NSCocoaErrorDomain Code = 4097 "подключение к службе с именем net.whatsapp.WhatsApp.ShareExtension" UserInfo = {NSDebugDescription = соединение в сервис под названием net.whatsapp.WhatsApp.ShareExtension}

2018-02-02 19: 56: 31.991895-0300 myapp [748: 116227] [core] SLComposeViewController завершил создание экземпляра контроллера удаленного просмотра (null) ошибка Ошибка Домен = NSCocoaErrorDomain Code = 4097 "подключение к службе с именем net.whatsapp.WhatsApp.ShareExtension Идентификатор запроса расширения "UserInfo = {NSDebugDescription = соединение с сервисом net.whatsapp.WhatsApp.ShareExtension} (null)"

2018-02-02 19: 56: 31.992325-0300 myapp [748: 116227] [core] HOST: не удалось загрузить контроллер удаленного просмотра с ошибкой: Error Domain = NSCocoaErrorDomain Code = 4097 "подключение к службе с именем net.whatsapp.WhatsApp. ShareExtension "UserInfo = {NSDebugDescription = соединение с сервисом net.whatsapp.WhatsApp.ShareExtension}

2018-02-02 19: 56: 31.992433-0300 myapp [748: 116227] [core] Лист не представлен, вызывая преждевременное завершение

2018-02-02 19: 56: 31.992479-0300 myapp [748: 116227] [core] SLComposeViewController completeWithResult: 0

2018-02-02 19: 56: 31.995770-0300 myapp [748: 116227] [core] SLComposeViewController пропускает явное отклонение, потому что isBeingDismissed уже составляет 1 г

2018-02-02 19:56: 32.001500-0300 myapp [748: 116227] [core] SLComposeViewController dealloc

Я добавил "LSApplicationQueriesSchemes" с "WhatsApp" в файл plist.

Я попытался с помощью UIDocumentInteractionControllerDelegate определить, есть ли какие-либо странные события, но это не очень помогло.

Если есть адея ?! Спасибо, Антуан.


person Antoine Nedelec    schedule 02.02.2018    source источник
comment
Вы работаете на реальном устройстве iOS с установленным WhatsApp?   -  person rmaddy    schedule 03.02.2018
comment
Да, на моем iphone 6 с последней ОС, WhatsApp и мессенджером   -  person Antoine Nedelec    schedule 03.02.2018


Ответы (1)


Вот рабочий код, с помощью которого вы можете поделиться своим изображением в WhatsApp. Все, что вам нужно сделать, это просто добавить LSApplicationQueriesSchemes WhatsApp в свой файл plist для включения совместного использования WhatsApp.

Swift 4

func shareOnWhatsUp() {

    if UIApplication.shared.canOpenURL(URL(string: "whatsapp://app")!) {
        var documentInteractionController: UIDocumentInteractionController = UIDocumentInteractionController.init()
        let iconImage = UIImage(named: "IMG_1.jpg")
        let pathURL =   URL.init(fileURLWithPath: NSHomeDirectory() + "/Documents/whatsAppTmp.wai")

        do {
            try UIImageJPEGRepresentation(iconImage!, 1.0)?.write(to: pathURL)
        } catch {
            print(error.localizedDescription)
        }
        documentInteractionController!.url = pathURL
        documentInteractionController!.uti = "net.whatsapp.image"
        documentInteractionController!.delegate = self
        documentInteractionController!.presentOpenInMenu(from: CGRect(x: 0, y: 0, width: 0, height: 0), in: self.view, animated: true)
    }
    else {
        print("whatsup not installed")
    }
}
person iOS Team    schedule 03.02.2018
comment
Спасибо, сначала открывается меню общего доступа, а затем меню WhatsApp, если я нажимаю на WhatsApp. Одна вещь, которую я еще не понял (из документации WhatsApp: faq.whatsapp.com/ ru / iphone / 23559013), как открыть WhatsApp напрямую с эксклюзивным расширением (.wai, .waa, .wam) - person Antoine Nedelec; 03.02.2018
comment
для записи ошибка, связанная с невозможностью совместного использования этого элемента, была исправлена ​​путем создания класса с UIDocumentInteractionController и UIDocumentInteractionControllerDelegate, а затем создания его экземпляра в моем корневом контроллере. и установка делегата на себя в инициализации этого нового класса. - person Antoine Nedelec; 03.02.2018
comment
Уважаемый, В соответствии с определением вашего вопроса я предоставил вам рабочее решение для обмена изображением с whaapp. Если вы все еще сталкиваетесь с какой-либо ошибкой, просто поделитесь мне своим источником, я могу проверить его и исправить. - person iOS Team; 05.02.2018
comment
Спасибо, проблема решена, обмен работает. Следующая проблема, с которой я столкнулся, связана с WhatsApp API. Я задал там вопрос: stackoverflow.com/questions/48599394/. Я не мог найти в Интернете никого, кто бы успешно заставил это работать, или говорил бы о том, чтобы это работало. Думаю, проблема не в коде. - person Antoine Nedelec; 06.02.2018