Pracuję nad prostą szybką aplikacją, w której użytkownik wprowadza adres e-mail i naciska przycisk, który otwiera aplikację pocztową, z wpisanym adresem w pasku adresu. Wiem, jak to zrobić w Objective-C, ale mam problem z uruchomieniem go w Swift.
119
Podczas gdy inne odpowiedzi są poprawne, nigdy nie możesz wiedzieć, czy iPhone / iPad, na którym działa Twoja aplikacja, ma zainstalowaną aplikację Apple Mail, czy nie, ponieważ może ją usunąć użytkownik.
Lepiej jest obsługiwać wielu klientów poczty e-mail. Poniższy kod obsługuje wysyłanie wiadomości e-mail w bardziej elegancki sposób. Przepływ kodu to:
mailto:..
która monituje użytkownika o zainstalowanie aplikacji Apple Mail.Kod jest napisany w języku Swift 5 :
Pamiętaj, że celowo przegapiłem treść aplikacji Outlook, ponieważ nie jest ona w stanie jej przeanalizować.
Musisz również dodać następujący kod do
Info.plist
pliku, który umieszcza na białej liście schematy zapytań URl, które są używane.źródło
isHTML
w powyższym kodzie na true. W przypadku innych klientów wydaje się, że nie jest to możliwe, więcej informacji można znaleźć na stronie stackoverflow.com/questions/5620324/mailto-link-with-html-bodyNie jestem pewien, czy chcesz przełączyć się na samą aplikację pocztową, czy po prostu otworzyć i wysłać wiadomość e-mail. W przypadku drugiej opcji połączonej z przyciskiem IBAction:
źródło
class myClass: UIViewController, MFMailComposeViewControllerDelegate {
'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target
. Awarie aplikacji na niektórych urządzeniach (iPhone 5, iPhone 6 i iPad Mini)W Swift 3 upewnij się, że dodajesz
import MessageUI
i musisz być zgodny zMFMailComposeViewControllerDelegate
protokołem.Protokół:
źródło
Dla Swift 4.2+ i iOS 9+
Zastąp [email protected] żądanym adresem e-mail.
źródło
Swift 2, ze sprawdzeniem dostępności :
źródło
Oto jak to wygląda dla Swift 4:
źródło
Zaktualizowana odpowiedź od Stephena Grooma dla Swift 3
źródło
Oto aktualizacja dla Swift 4, jeśli po prostu chcesz otworzyć klienta poczty za pomocą
URL
:To działało idealnie dla mnie :)
źródło
To proste rozwiązanie 3 kroków w Swift.
Dodaj, aby dostosować delegata
I po prostu stwórz swoją metodę:
źródło
Powinieneś spróbować wysłać za pomocą wbudowanego edytora poczty, a jeśli to się nie powiedzie, spróbuj z share:
źródło
Zwróć uwagę, że nie wszyscy użytkownicy mają skonfigurowane urządzenie do wysyłania e-maili, dlatego przed próbą wysłania musimy sprawdzić wynik canSendMail (). Zauważ również, że musisz złapać wywołanie zwrotne didFinishWith, aby zamknąć okno poczty.
źródło
W kontrolerze widoku, z którego chcesz, aby aplikacja pocztowa otwierała się po dotknięciu.
Umieść tę funkcję w swoim kontrolerze.
Rozszerz swój kontroler widoku i dostosuj się do MFMailComposeViewControllerDelegate .
Skorzystaj z tej metody i poradzić sobie z niepowodzeniem, wysyłaniem wiadomości.
źródło
Dla tych z nas, którzy wciąż pozostają w tyle w Swift 2.3, oto odpowiedź Gordona w naszej składni:
źródło
Daj użytkownikowi możliwość wyboru wielu opcji poczty (takich jak iCloud, google, yahoo, Outlook.com - jeśli żadna poczta nie jest wstępnie skonfigurowana w jego telefonie) do wysyłania wiadomości e-mail.
źródło