更改默认电子邮件应用程序会影响 MFMailComposeViewController 的使用吗?

mmd*_*080 12 ios swift ios14

iOS 14 用户可以更改默认电子邮件应用程序。如果有的话,这对 MFMailComposeViewController 有什么影响?更具体地说,如果 MFMailComposeViewController 与默认电子邮件客户端的任何内容“正常工作”,例如设置收件人、主题、正文等,那将是理想的。

如果这是不可能的,我想打开一个 mailto URL 将打开任何默认的邮件应用程序。有什么方法可以在 iOS 14 发布之前对此进行测试?

Jor*_*n H 9

iOS 14 及其设置默认邮件应用程序的能力在MFMailComposeViewControllerAPI方面没有任何改变。它只能显示邮件的撰写表,因此当他们不使用邮件应用程序时canSendMail()仍会返回false

为了更好地支持选择使用不同电子邮件应用程序的用户,您可以打开一个mailtoURL。这将打开默认的电子邮件应用程序并调出他们的撰写表。如果未安装电子邮件应用程序,它将显示系统警报,询问用户是否要从 App Store 恢复邮件(除非在模拟器中运行)。此API 文档说明了如何创建 URL,包括如何指定主题、正文和其他收件人。

请注意,这将使您的应用程序打开邮件应用程序或其他电子邮件应用程序。如果您希望用户在使用 Mail 时留在您的应用中,您可以继续使用MFMailComposeViewController并回退到mailtowhen canSendMail()Return false

如果您愿意,您还可以检查是否可以打开mailto:URL,如果不能,则向用户展示您自己的消息。请注意,这需要mailtoLSApplicationQueriesSchemes在 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)