iOS 14 用户可以更改默认电子邮件应用程序。这对 MFMailComposeViewController 有什么影响(如果有的话)?更具体地说,如果 MFMailComposeViewController 与任何默认电子邮件客户端“正常工作”,例如设置收件人、主题、正文等,那将是理想的。
如果这是不可能的,我想打开一个 mailto URL 将打开默认邮件应用程序是什么。在 iOS 14 发布之前有什么方法可以测试吗?
iOS 14 及其设置默认邮件应用程序的能力并没有改变任何关于MFMailComposeViewController
API 的内容。它只能显示 Mail 的撰写表,因此在他们不使用 Mail 应用程序时canSendMail()
仍会返回。false
为了更好地支持选择使用不同电子邮件应用程序的用户,您可以打开一个mailto
URL。这将打开默认的电子邮件应用程序并调出他们的撰写表。如果未安装电子邮件应用程序,它将显示系统警报,询问用户是否要从 App Store 恢复邮件(除非在模拟器中运行)。此API 文档说明了如何创建 URL,包括如何指定主题、正文和其他收件人。
请注意,这将使您的应用程序打开邮件应用程序或其他电子邮件应用程序。如果您希望用户在使用 Mail 时保留在您的应用中,您可以继续使用MFMailComposeViewController
并回退到mailto
when canSendMail()
returns false
。
如果您愿意,您还可以检查是否可以打开mailto:
URL,如果不能,则向用户显示您自己的消息。请注意,这需要您添加mailto
到LSApplicationQueriesSchemes
Info.plist 中。
我发现这篇文章也很有帮助。
if MFMailComposeViewController.canSendMail() {
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setToRecipients([email])
mail.setSubject(subject)
present(mail, animated: true, completion: nil)
} else {
if let mailURLString = "mailto:\(email)?subject=\(subject)".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
let mailURL = URL(string: mailURLString) {
if UIApplication.shared.canOpenURL(mailURL) { //check not needed, but if desired add mailto to LSApplicationQueriesSchemes in Info.plist
view.window?.windowScene?.open(mailURL, options: nil, completionHandler: nil)
} else {
//maybe they like web apps? ♂️
//maybe let them copy the email address to the clipboard or something
}
}
}