From c59e3e4ddfcc92b0462961da93568f290a50deb7 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Fri, 8 Jan 2021 12:15:16 +0800 Subject: [PATCH] Emails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Acquiesce to the user’s request for a different default mail app. --- .../iOS/Article/WebViewController.swift | 20 +++++------------- Multiplatform/iOS/Info.plist | 4 ++++ iOS/Article/WebViewController.swift | 21 ++++++------------- iOS/Resources/Info.plist | 4 ++++ 4 files changed, 19 insertions(+), 30 deletions(-) diff --git a/Multiplatform/iOS/Article/WebViewController.swift b/Multiplatform/iOS/Article/WebViewController.swift index 151084f75..8a552f39a 100644 --- a/Multiplatform/iOS/Article/WebViewController.swift +++ b/Multiplatform/iOS/Article/WebViewController.swift @@ -315,15 +315,14 @@ extension WebViewController: WKNavigationDelegate { } else if components?.scheme == "mailto" { decisionHandler(.cancel) - guard let emailAddress = url.emailAddress else { + guard let _ = url.emailAddress else { return } - if MFMailComposeViewController.canSendMail() { - let mailComposeViewController = MFMailComposeViewController() - mailComposeViewController.setToRecipients([emailAddress]) - mailComposeViewController.mailComposeDelegate = self - self.present(mailComposeViewController, animated: true, completion: {}) + if UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url, options: [.universalLinksOnly : false]) { (success) in + print(success) + } } else { let alert = UIAlertController(title: NSLocalizedString("Error", comment: "Error"), message: NSLocalizedString("This device cannot send emails.", comment: "This device cannot send emails."), preferredStyle: .alert) alert.addAction(.init(title: NSLocalizedString("Dismiss", comment: "Dismiss"), style: .cancel, handler: nil)) @@ -418,15 +417,6 @@ extension WebViewController: UIScrollViewDelegate { } -// MARK: MFMailComposeViewControllerDelegate -extension WebViewController: MFMailComposeViewControllerDelegate { - - func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { - self.dismiss(animated: true, completion: nil) - } - -} - // MARK: JSON private struct ImageClickMessage: Codable { diff --git a/Multiplatform/iOS/Info.plist b/Multiplatform/iOS/Info.plist index d797bc4a1..cab22bf05 100644 --- a/Multiplatform/iOS/Info.plist +++ b/Multiplatform/iOS/Info.plist @@ -81,5 +81,9 @@ group.$(ORGANIZATION_IDENTIFIER).NetNewsWire.iOS AppIdentifierPrefix $(AppIdentifierPrefix) + LSApplicationQueriesSchemes + + mailto + diff --git a/iOS/Article/WebViewController.swift b/iOS/Article/WebViewController.swift index 40d910ba8..35b6d28c3 100644 --- a/iOS/Article/WebViewController.swift +++ b/iOS/Article/WebViewController.swift @@ -356,16 +356,14 @@ extension WebViewController: WKNavigationDelegate { } else if components?.scheme == "mailto" { decisionHandler(.cancel) - guard let emailAddress = url.emailAddress else { + guard let _ = url.emailAddress else { return } - if MFMailComposeViewController.canSendMail() { - let mailComposeViewController = MFMailComposeViewController() - mailComposeViewController.setToRecipients([emailAddress]) - mailComposeViewController.setSubject(url.valueFor("subject") ?? "") - mailComposeViewController.mailComposeDelegate = self - self.present(mailComposeViewController, animated: true, completion: {}) + if UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url, options: [.universalLinksOnly : false]) { (success) in + print(success) + } } else { let alert = UIAlertController(title: NSLocalizedString("Error", comment: "Error"), message: NSLocalizedString("This device cannot send emails.", comment: "This device cannot send emails."), preferredStyle: .alert) alert.addAction(.init(title: NSLocalizedString("Dismiss", comment: "Dismiss"), style: .cancel, handler: nil)) @@ -459,14 +457,7 @@ extension WebViewController: UIScrollViewDelegate { } -// MARK: MFMailComposeViewControllerDelegate -extension WebViewController: MFMailComposeViewControllerDelegate { - - func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { - self.dismiss(animated: true, completion: nil) - } - -} + // MARK: JSON diff --git a/iOS/Resources/Info.plist b/iOS/Resources/Info.plist index 094a9981c..e843a3e9e 100644 --- a/iOS/Resources/Info.plist +++ b/iOS/Resources/Info.plist @@ -54,6 +54,10 @@ CFBundleVersion $(CURRENT_PROJECT_VERSION) + LSApplicationQueriesSchemes + + mailto + LSRequiresIPhoneOS NSAppTransportSecurity