使用UIActivityViewController在Swift 3中分享Live照片到WhatsApp不起作用

7

我正在使用UIActivityViewController在不同的社交媒体上分享图像、视频和实况照片。

但是,当我在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 skipping explicit dismiss because isBeingDismissed is already 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)

                }
            })

有人能帮我一下吗。

谢谢。


你能展示一下你尝试过的代码吗? - Anbu.Karthik
@EmilioPelaez,如果Whatsapp不支持实时照片,那么当我分享实时照片中的静态图像时,有时会出现上述错误,有时会显示“无法共享此项,请选择其他项”的随机错误。 - Anjali Bhimani
@Anbu.Karthik:我已经添加了上面的代码。 - Anjali Bhimani
图像数据是NSData或其他。 - Anbu.Karthik
@Anbu.Karthik: 是的,NSData。 - Anjali Bhimani
显示剩余4条评论
1个回答

4

这里我找到了解决方案

我已经移除了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)
            }
        }
    }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接