13

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

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

4

1 回答 1

13

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

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

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

如果您愿意,您还可以检查是否可以打开mailto:URL,如果不能,则向用户显示您自己的消息。请注意,这需要您添加mailtoLSApplicationQueriesSchemesInfo.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
        }
    }
}
于 2021-02-26T02:21:50.207 回答