ios10 中禁用使用 MFMessageComposeViewController 发送照片

Jam*_*Don 2 mfmessagecomposeviewcontroller ios10

我的应用程序中有消息发送功能,并使用 MFMessageComposeViewController 实现了相同的功能。我可以在 iOS9 中将照片附加到消息中,但在 iOS 10 中不行吗?有人有同样的问题吗?

小智 7

Swift 5.0 版本: 调用以下名为 的方法displayMessageInterface

- 重要注意事项:

  • composeViewController.addAttachmentData(dataImage!, typeIdentifier: "image/png", filename: "ImageData.png")

    abc.png在上面的行中,在我的情况下,文件名必须是类型,或者abc.jpeg如果您使用的是 jpeg 图像数据,则类型标识符必须分别跟随image/pngimage/jpeg我费了很大劲才发现这一点。即使其他答案已经足够了,我还是写这个答案的原因。

有关 typeIdentifiers 的更多信息,请使用以下链接:https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-开关1

fileprivate func displayMessageInterface() {
    if MFMessageComposeViewController.canSendText() {
        let composeViewController = MFMessageComposeViewController()
        composeViewController.messageComposeDelegate = self
        composeViewController.body = "Enter your text body here."

        if MFMessageComposeViewController.canSendAttachments() {
            let image = UIImage(named: "image-name")!
            let dataImage =  image.pngData()
            guard dataImage != nil else {
                return
            }
            composeViewController.addAttachmentData(dataImage!, typeIdentifier: "image/png", filename: "ImageData.png")
        }
        self.present(composeViewController, animated: true)
    } else {
        print("Can't send messages.")
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我在上面的方法中提到了委托,因此您可以在以下情况下使用它UIViewController

extension UIViewController: MFMessageComposeViewControllerDelegate {
    func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
        if result == .failed {
            print("could not send message")
        }
        self.dismiss(animated: true)
    } 
}
Run Code Online (Sandbox Code Playgroud)