如何在 MFMessageComposeViewController 中启用相机?

Posted

技术标签:

【中文标题】如何在 MFMessageComposeViewController 中启用相机?【英文标题】:How to enable camera in MFMessageComposeViewController? 【发布时间】:2017-08-22 17:21:24 【问题描述】:

我正在开发一个带有按钮的 ios 应用程序,用于使用 SMS/iMessage 报告问题。我正在使用 MFMessageComposeViewController 使用以下代码(Swift 3)呈现消息组合界面:

if(MFMessageComposeViewController.canSendText())

        let controller = MFMessageComposeViewController()
        controller.messageComposeDelegate = self
        controller.body = "Example Message"
        controller.recipients = ["2345678901"]
        self.present(controller, animated: true, completion: nil)
    

我还实现了 MFMessageComposeViewControllerDelegate 函数以正确关闭。标准短信/iMessage 发送成功,但用户没有附加图像的选项。相机、iMessage 应用程序等按钮在那里,但它们被禁用且无法按下。如何启用这些按钮(特别是相机)以允许我的用户将图像附加到使用应用程序编写的消息中?

有问题的按钮:

编辑: 感谢 Abdelahad 的建议。我修改了他的回复以允许多个收件人并包含消息正文。我还对其进行了更新以删除已弃用的 addingPercentEscapes(using: ) 方法。

这是一个使用 url 打开消息应用程序的解决方案。注意:这会使用户退出应用程序。

let recipients = "2345678901,3456789012" //Phone Numbers
let messageBody = "This is a test"
let sms: String = "sms://open?addresses=\(recipients)&body=\(messageBody)"
let smsEncoded = sms.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)
let url = URL(string: smsEncoded!)
UIApplication.shared.openURL(url!)

但我仍然想要一个不会让用户退出应用程序的解决方案。这可能吗?为什么 MFMessageComposeViewController 会显示按钮而不启用它们?

【问题讨论】:

你有想过这个吗?我现在遇到了同样的问题 不,我没有。这似乎是 MFMessageComposeViewControllerDelegate 中的一个错误 这绝对是一个错误,面临同样的问题。目前唯一合适的解决方案是使用 url。 2020年了,我觉得这个问题还是存在的。我一直在寻找解决方案,到目前为止,我一无所获。我的理解是相机按钮一直工作到 iOS 10 之后才停止。我们现在升级到 iOS13 并且不工作的按钮仍然存在。 【参考方案1】:

不要使用 MFMessageComposeViewController 使用 UIApplication.shared.openURL(url!) 但这会将用户带出应用程序

var phoneToCall: String = "sms: +201016588557"
var phoneToCallEncoded = phoneToCall.addingPercentEscapes(using: String.Encoding.ascii)
var url = URL(string: phoneToCallEncoded)
UIApplication.shared.openURL(url!)

【讨论】:

感谢您的回复!将用户带入消息应用程序确实启用了相机,但我正在寻找一种不会将用户带出应用程序的解决方案。我还需要能够预先填写消息文本。有没有办法用描述的方法做到这一点? 你可以附上图片,或者你需要有相机工作 好的,这个解决方案部分有效:let phoneToCall: String = "sms://open?addresses=\(recipients)&body=\(text)" let phoneToCallEncoded = phoneToCall.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed) let url = URL(string: phoneToCallEncoded!) UIApplication.shared.openURL(url!) 但它仍然将用户带出应用程序,这是不可取的。 是的,我检查了它并编辑了我的答案,这将把用户带到应用程序之外

以上是关于如何在 MFMessageComposeViewController 中启用相机?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?