XCODE / IOS - 通过 UIDocumentInteractionController 共享
Posted
技术标签:
【中文标题】XCODE / IOS - 通过 UIDocumentInteractionController 共享【英文标题】:XCODE / IOS - Share via UIDocumentInteractionController 【发布时间】:2018-02-02 23:12:25 【问题描述】:我没有成功通过“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 或 messenger 的共享菜单的一个图块时,什么都没有发生,并且我有这个错误日志:
2018-02-02 19:56:31.293849-0300 myapp[748:116227] [核心] SLComposeViewController initWithExtension: id = net.whatsapp.WhatsApp.ShareExtension requestedServiceType: (null)
2018-02-02 19:56:31.296021-0300 myapp[748:116227] [核心] SLComposeViewController addExtensionItem: - userInfo: NSExtensionItemAttachmentsKey = ( " types = (\n \"public.jpeg\",\n \"public.file-url\"\n)" );
2018-02-02 19:56:31.883007-0300 myapp[748:116227] [核心] viewWillAppear
2018-02-02 19:56:31.883240-0300 myapp[748:116227] [核心] SLComposeViewController 包括 1 个显式 NSExtensionItems
2018-02-02 19:56:31.883311-0300 myapp[748:116227] [核心] SLComposeViewController 即将使用 1 个 NSExtensionItems 数组实例化远程视图控制器
2018-02-02 19:56:31.886583-0300 myapp[748:116227] [核心] viewDidAppear
2018-02-02 19:56:31.989725-0300 myapp[748:116362] [ops] 集线器连接错误错误域=NSCocoaErrorDomain 代码=4097“连接到名为 net.whatsapp.WhatsApp.ShareExtension 的服务”UserInfo= NSDebugDescription=连接到名为 net.whatsapp.WhatsApp.ShareExtension 的服务
2018-02-02 19:56:31.991895-0300 myapp[748:116227] [核心] SLComposeViewController 完成了远程视图控制器的实例化(空)错误错误域 = NSCocoaErrorDomain 代码 = 4097“连接到名为 net.whatsapp 的服务。 WhatsApp.ShareExtension" UserInfo=NSDebugDescription=连接到名为 net.whatsapp.WhatsApp.ShareExtension 的服务扩展请求标识符(空)
2018-02-02 19:56:31.992325-0300 myapp[748:116227] [核心] 主机:无法加载远程视图控制器,错误:错误域 = NSCocoaErrorDomain 代码 = 4097“连接到名为 net.whatsapp 的服务.WhatsApp.ShareExtension" UserInfo=NSDebugDescription=连接到名为 net.whatsapp.WhatsApp.ShareExtension 的服务
2018-02-02 19:56:31.992433-0300 myapp[748:116227] [核心] 工作表未呈现,调用提前完成
2018-02-02 19:56:31.992479-0300 myapp[748:116227] [核心] SLComposeViewController completeWithResult: 0
2018-02-02 19:56:31.995770-0300 myapp[748:116227] [核心] SLComposeViewController 跳过显式关闭,因为 isBeingDismissed 已经为 1 g
2018-02-02 19:56:32.001500-0300 myapp[748:116227] [核心] SLComposeViewController dealloc
我确实在 plist 文件中添加了“LSApplicationQueriesSchemes”和“whatsapp”。
我尝试使用 UIDocumentInteractionControllerDelegate 来查找是否有任何奇怪的事件,但没有太大帮助。
如果你有任何想法?! 谢谢,安托万。
【问题讨论】:
您是否在安装了 WhatsApp 的真实 ios 设备上运行? 是的,在我的 iphone 6 上,最后一个操作系统,whatsapp 和 messenger 【参考方案1】:这是工作代码,您可以通过它将图像共享到whatsapp,您只需将LSApplicationQueriesSchemes whatsapp添加到您的plist文件中即可启用WhatsApp共享。
斯威夫特 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")
【讨论】:
谢谢,是先打开分享菜单,然后如果我点击whatsapp,就会打开whatsapp菜单。我还没有弄清楚的一件事(来自 whatsapp 文档:faq.whatsapp.com/en/iphone/23559013),是如何使用专有扩展名(.wai、.waa、.wam)直接打开 whatsapp 作为记录,“无法共享此项目”错误已通过使用“UIDocumentInteractionController”和“UIDocumentInteractionControllerDelegate”创建一个类来修复,然后在我的根控制器中实例化它。并在该新类的 init 中将委托设置为 self。 亲爱的,根据您的问题定义,我为您提供了与 whaapp 共享图像的工作解决方案,如果您仍然遇到任何错误,请分享您的来源,我可以检查并修复它。 谢谢,我这里的问题已经解决了,分享成功了。我遇到的下一个问题是关于whatsapp API。我在那里问了这个问题:***.com/questions/48599394/…。我在网上找不到任何人成功地让它工作,或者谈论让它工作。我想问题不在于代码。以上是关于XCODE / IOS - 通过 UIDocumentInteractionController 共享的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 UI 测试(Xcode 12、iOS14)访问推送通知?