Публикация живых фотографий в WhatsApp в Swift 3 с использованием UIActivityViewController не работает

Я делюсь изображениями, видео и LivePhoto с помощью UIActivityViewController в различных социальных сетях.

Но когда я делюсь LivePhoto в WhatsApp, происходит следующее:

  1. когда присутствует ActivityViewController -> нажмите WhatsApp -> он представляет список контактов на секунду и быстро отклоняет, и когда я пытаюсь распечатать ошибку с помощью обработчика завершения ActivityViewController, он печатает что-то вроде этого:

[core] SLComposeViewController remoteViewController: didTerminateWithError: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted} [core] SLComposeViewController completeWithResult: 0 [core] SLComposeViewController пропускает явное отклонение, поскольку isBeingDismissed уже 1 SLComposeViewController Dealloc

I have tried with this code : 

PHImageManager.default().requestImageData(for: selectedAsset, options: nil, resultHandler: { (imgData, str, image, info) in

                activityItems.append(imgData!)

                let activityViewController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
                activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
                activityViewController.completionWithItemsHandler = {(activityType: UIActivityType?, completed: Bool, returnedItems:[Any]?, error: Error?) in
                    //Do whatever you want
                    print("activityType ----- \(activityType) || error ----- \(error)")
                }
                // present the view controller
                DispatchQueue.main.async {
//                    self.present(activityViewController, animated: true, completion: nil)
                    self.navigationController?.present(activityViewController, animated: true, completion: nil)

                }
            })

может ли кто-нибудь помочь мне, пожалуйста.

Спасибо.


person Anjali Bhimani    schedule 13.07.2017    source источник
comment
Похоже, WhatsApp не поддерживает живые фотографии. Можете ли вы поделиться им где-нибудь еще, например, в iMessage? Если он работает везде, вероятно, WhatsApp его не поддерживает.   -  person EmilioPelaez    schedule 13.07.2017
comment
можешь показать проверенный код   -  person Anbu.Karthik    schedule 13.07.2017
comment
@EmilioPelaez, если Whatsapp не поддерживает живое фото, то, когда я делюсь неподвижным изображением с живого фото, иногда появляются случайные ошибки, как указано выше, а иногда, например, этот элемент не может быть опубликован, пожалуйста, выберите другой элемент   -  person Anjali Bhimani    schedule 13.07.2017
comment
@ Anbu.Karthik: я добавил код выше   -  person Anjali Bhimani    schedule 13.07.2017
comment
данные изображения - nsdata или еще   -  person Anbu.Karthik    schedule 13.07.2017
comment
@Anbu.Karthik: да NSData   -  person Anjali Bhimani    schedule 13.07.2017
comment
см. это, например, stackoverflow.com/questions/36165222/ или добавьте изображение, см. этот stackoverflow.com /вопросы/20417047/,   -  person Anbu.Karthik    schedule 13.07.2017
comment
но ваши данные высоки, поэтому соединение прервано   -  person Anbu.Karthik    schedule 13.07.2017
comment
@Anbu.Karthik: сослался на вашу ссылку, но это для конкретного WhatsApp, но мне нужно поделиться своими фотографиями и живыми фотографиями в каждой социальной сети, которые указаны в UIActivityViewController, поэтому это бесполезно для меня.   -  person Anjali Bhimani    schedule 13.07.2017


Ответы (1)


Вот я нашел решение

Я удалил UIActivityController и использовал UIDocumentInteractionController, как показано ниже:

let imageLocalPath = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("public.jpeg")
                
                if let imageData = imgData {
                    do {
                        try imageData.write(to: imageLocalPath, options: .atomic)
                        self.documentInteractionController = UIDocumentInteractionController(url: imageLocalPath)
//                        self.documentInteractionController.uti = "net.whatsapp.image"
                        self.documentInteractionController.uti = "public.image"
                        self.documentInteractionController.delegate = self
                        self.documentInteractionController.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true)
                    } catch {
                        print(error)
                    }
                }

Затем в методе делегата:

Для WhatsApp:

func documentInteractionController(_ controller: UIDocumentInteractionController, willBeginSendingToApplication application: String?) {
        print("Application ----- \(String(describing: application))")
        
    if(check for whatsApp condition){
        let imageLocalPath = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("whatsAppTmp.wai")
        if let imageData = selectedImageData {
            do {
                try imageData.write(to: imageLocalPath, options: .atomic)
                controller.uti = "net.whatsapp.image"
                controller.url = imageLocalPath
            } catch {
                print(error)
            }
        }
    }
 }
person Anjali Bhimani    schedule 14.07.2017