iOS SDK Trimiteți e-mail în aplicație

În acest tutorial pentru iOS SDK, voi demonstra cum să permiteți utilizatorilor să trimită e-mailuri fără a lăsa aplicația utilizând clasa MFMailComposeViewController. Vom configura un șablon de e-mail cu destinatari, un subiect, un text și chiar un atașament de imagine.

SDK-ul iOS oferă o interfață standard ușor de utilizat, care permite utilizatorilor să trimită și să editeze e-mailuri din propria aplicație. Pentru a face acest lucru, va trebui să utilizați MFMailComposeViewController clasă. Acest controler de vizualizare afișează o interfață standard de poștă și oferă, de asemenea, funcționalitatea pentru a răspunde la evenimentele utilizatorilor efectuate pe acea interfață. De exemplu, clasa vă va notifica dacă utilizatorul a lovit "trimite" sau "anula".

Notă: MFMailComposeViewController este disponibil numai pe iOS 3.0 sau o versiune ulterioară.

Deci, cum funcționează? Urmați pașii din acest tutorial pentru a afla.


Pasul 1: Creați un nou proiect Xcode

Deschideți Xcode și selectați? Creați un nou proiect Xcode ?. Selectați Vizualizare bazată pe aplicație apoi faceți clic pe Următor →. Introduceți un nume pentru proiectul dvs. Am sunat pe mine @? Mail ?. Introduceți identificatorul companiei și asigurați-vă că ați selectat "iPhone" pentru Familia de dispozitive, pentru că vom face o aplicație iPhone. Dacă ați terminat, faceți clic pe Următor →. Alegeți un loc pentru a vă salva proiectul și faceți clic pe Crea.

яя я

Pasul 2: Adăugați butonul de poștă electronică

Deschideți fișierul "MailViewController.xib" și trageți un buton în vizualizare. Setați titlul butonului la "Mail". Acum, selectați butonul din mijloc al editorului pentru a afișa editorul "Asistent", astfel încât să putem adăuga o acțiune la butonul pe care tocmai l-am creat.

яя я

Selectați butonul și trageți CTRL la "MailViewController.h". În fereastra pop-up afișată, introduceți? OpenMail? pentru numele și asigurați-vă că ați setat tipul de conexiune la "Acțiune", pentru că vrem să facem o acțiune și nu o priză.

яя я

Pasul 3: Importați MessageUI Framework

În zona de navigare din Xcode 4, selectați numele proiectului. Apoi, selectați țintă curentă (? Mail? În acest caz), apoi selectați "Construiți fazele?" tab. Extindeți linia binară cu biblioteci? , apoi faceți clic pe butonul? +? pentru a adăuga un cadru nou. Introduceți mesajul "în" caseta de căutare și selectați MessageUI.framework care apare în listă. Faceți clic pe? Adăugați? pentru a include acest cadru în faza de legătură a proiectului dvs..

Acum că ați adăugat cadrul MessageUI în proiectul dvs., trebuie să importați acel cadru în controlerul de vizualizare care va utiliza MFMailComposeViewController, deci, în cazul nostru, MailViewController.h.

Accesați acest fișier și modificați codul astfel:

 #import  #import  @ interfață MailViewController: UIViewController  - (IBAction) openMail: (id) expeditor; @Sfârșit

După cum puteți vedea, am declarat de asemenea MFMaileComposeViewControllerDelegate în codul de mai sus. Vom folosi acest delegat pentru a vedea rezultatul mesajului.


Pasul 4: Adăugați resurse pentru proiect

Glisați următoarea imagine în fișierele de susținere? dosar în proiectul dvs. Asigurați-vă că? Copiați articolele în dosarul grupului de destinație (dacă este necesar)? este verificată înainte de a face clic finalizarea.

яя я

Pasul 5: Verificați dacă dispozitivul este capabil să trimită e-mail

Deschideți? MailViewController.m? fișier și derulați în jos până la openMail: acțiune și modificați codul după cum urmează:

 - (IBAction) openMail: (id) expeditor if ([MFMailComposeViewController canSendMail]) else UIAlertView * alert = [UIAlertView alloc] initWithTitle: @ mesajul "Failure": @ "Aparatul nu suporta foaia compozitorului" delegat: nil cancelButtonTitle: @ "OK" altButtonTitle: nil]; [alertă spectacol]; [release release]; 

Aici verificăm dacă dispozitivul curent poate trimite e-mail cu canSendMail clasă de MFMailComposeViewController. Trebuie să apelați întotdeauna această metodă înainte de a deschide interfața de e-mail. Dacă dispozitivul nu poate trimite poștă electronică, ar trebui să îl notificați pe utilizator (am folosit un mesaj UIAlertView pentru asta).


Pasul 6: Afișați interfața de corespondență

Dacă dispozitivul poate trimite poștă electronică, afișăm interfața de e-mail. Mergeți la openMail: acțiune și modificați codul după cum urmează:

 - (IBAction) openMail: (id) expeditor dacă ([MFMailComposeViewController canSendMail]) MFMailComposeViewController * mailer = [[MFMailComposeViewController alloc] init]; mailer.mailComposeDelegate = auto; [mailer setSubject: @ "Un mesaj de la MobileTuts +"]; NSArray * toRecipients = [NSArray arrayWithObjects: @ "[email protected]", @ "[email protected]", nil]; [setul de e-mail al destinatarilor: laRecipienți]; UIImage * myImage = [UIImage imageNamed: @ "mobiletuts-logo.png"]; NSData * imageData = UIImagePNGRpresentation (myImage); [mailer addAttachmentData: imagineData mimeType: @ "image / png" NumeNumele: @ "mobiletutsImage"]; NSString * emailBody = @ "Ați văzut site-ul Web MobileTuts +?"; [mailer setMessageBody: emailBody este HTML: NU]; [auto prezentModalViewController: mailer animat: DA]; [release of mailer];  altceva UIAlertView * alert = [UIAlertView alloc] initWithTitle: @ Mesajul "Failure": @ "Dispozitivul dvs. nu acceptă foaia compozitorului": null cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertă spectacol]; [release release]; 

Mai intai creem a MFMaileComposeViewController și o numiți "mailer". Am setat mailComposeDelegate la sine, astfel încât să putem vedea rezultatul e-mailului. Subiectul este setat la "Un mesaj de la MobileTuts +?". După cum puteți vedea, toRecipients este de tip NSArray. Acest lucru se datorează faptului că puteți adăuga mai mulți destinatari. Am adăugat două adrese false de e-mail, dar, bineînțeles, puteți pune orice adresă doriți. După aceea, stocăm o imagine ca o NSData obiect, pentru că nu putem trimite a UIImage direct. Apoi adăugăm NSData obiect ca atașament la e-mailul nostru. Am setat tipul la o imagine png și numele fișierului la "mobiletutsImage". Aceasta înseamnă că atunci când receptorul salvează imaginea, acesta va fi salvat sub numele "mobiletutsImage". Ultimul lucru pe care îl facem este să arătăm poșta electronică înainte de eliberarea obiectului mailer.


Pasul 7: Verificați rezultatul și renunțați la vizualizare

Trebuie să renunțați manual la interfața de e-mail ca răspuns la apelul unei metode delegate. Adăugați următorul cod sub openMail: acțiune:

 - (void) mailComposeController: (MFMailComposeViewController *) controler didFinishWithResult: (MFMailComposeResult) eroare de rezultat: (NSError *) eroare comutare (rezultat) caz MFMailComposeResultCancelled: NSLog (@ „); pauză; cazul MFMailComposeResultSaved: NSLog (@ "E-mail salvat: ați salvat mesajul de e-mail în dosarul proiectelor."); pauză; cazul MFMailComposeResultSent: NSLog (@ "Trimiteți prin e-mail: mesajul e-mail este în coada de așteptare în căsuța de ieșire și este gata să trimită."); pauză; cazul MFMailComposeResultFailed: NSLog (@ "Mail nu a reușit: mesajul e-mail nu a fost salvat sau în coadă, posibil din cauza unei erori."); pauză; implicit: NSLog (@ "Mesajul nu a fost trimis."); pauză;  // Eliminați vizualizarea de e-mail [self dismissModalViewControllerAnimated: YES]; 

În această metodă delegat, verificăm rezultatul afișării controlerului de vizualizare a corespondenței cu o instrucțiune de comutare și apoi respingerea controlerului de vizualizare cu o animație. În codul de mai sus, am tipărit pur și simplu un NSLog mesaj cu rezultatele, dar punctul este că ați putea răspunde dinamic la acțiunea utilizatorului.


BONUS: Faceți-o să funcționeze pentru iPad

Pe un iPad este bine să arătați interfața de corespondență într-o prezentare a foii de pagină. Puteți face acest lucru adăugând următoarea linie de cod chiar deasupra [auto prezentModalViewController: mailer animat: DA];:

 mailer.modalPresentationStyle = UIModalPresentationPageSheet;
яя я

Învelire

Sper că ți-a plăcut acest tutorial. Dacă aveți feedback sau solicitări pentru conținut suplimentar de iOS de la mine, vă rugăm să lăsați un comentariu de mai jos!

Cod