iOS SDK Send e-post i app

I denne veiledningen for iOS SDK demonstrerer jeg hvordan du lar brukerne sende e-post uten å forlate programmet ved hjelp av klassen MFMailComposeViewController. Vi vil sette opp en e-postmal med mottakere, et emne, kroppstext og til og med et bildevedlegg.

IOS SDK gir et brukervennlig, standardgrensesnitt som lar brukerne sende og redigere e-post fra din egen applikasjon. For å gjøre dette må du bruke MFMailComposeViewController klasse. Denne visningen kontrolleren viser et standard mail grensesnitt og gir også funksjonaliteten til å svare på bruker hendelser utført på dette grensesnittet. For eksempel vil du varsle deg om brukeren trykker "send" eller "avbryt".

Merk: MFMailComposeViewController er bare tilgjengelig på iOS 3.0 eller nyere.

Så, hvordan fungerer det? Følg trinnene i denne veiledningen for å finne ut.


Trinn 1: Opprett et nytt Xcode-prosjekt

Åpne Xcode og velg? Opprett et nytt Xcode-prosjekt ?. Å velge Visbasert applikasjon og klikk deretter neste. Skriv inn et navn for prosjektet ditt. Jeg ringte min @? Mail ?. Skriv inn din firmaidentifikator og kontroller at du valgte "iPhone" for Enhetsfamilie, fordi vi skal lage en iPhone-app. Hvis du er ferdig, klikk neste. Velg et sted for å lagre prosjektet ditt og klikk Skape.

яя я

Trinn 2: Legg til Mail-knappen

Åpne filen "MailViewController.xib" og dra en knapp i visningen. Sett tittelen på knappen til "Mail". Velg nå midtknappen til redaktøren for å vise? Assistent editor ?, så vi kan legge til en handling til knappen vi nettopp har opprettet.

яя я

Velg knappen og CTRL-dra til? MailViewController.h ?. I popup-vinduet som vises, skriv inn? OpenMail? for navn og sørg for å sette tilkoblingstypen til? Handling?, fordi vi vil gjøre en handling og ikke et uttak.

яя я

Trinn 3: Importer MessageUI Framework

I navigatorområdet til Xcode 4 velger du prosjektnavnet. Velg deretter det nåværende målet (? Mail? I dette tilfellet), og velg deretter? Byggfaser? fane. Utvid? Link binær med biblioteker? alternativet, og klikk deretter på? +? knappen for å legge til et nytt rammeverk. Skriv? Melding "i søkeboksen, og velg MessageUI.framework alternativet som vises i listen. Klikk? Legg til? å inkludere dette rammeverket i lenkefasen av prosjektet ditt.

Nå som du har lagt til MessageUI-rammen i prosjektet ditt, må du importere det rammeverket til visningen kontrolleren som vil bruke MFMailComposeViewController, så, i vårt tilfelle, MailViewController.h.

Gå til denne filen og endre koden for å lese som følger:

 #importere  #importere  @interface MailViewController: UIViewController  - (IBAction) Openmail: (id) sender; @slutt

Som du kan se, erklærte vi også MFMaileComposeViewControllerDelegate i ovennevnte kode. Vi vil bruke denne delegaten til å se resultatet av posten.


Trinn 4: Legg til prosjektressurser

Dra følgende bilde til? Støttende filer? mappe i prosjektet ditt. Pass på? Kopier elementer til destinasjonsgruppens mappe (om nødvendig)? er merket før du klikker bli ferdig.

яя я

Trinn 5: Sjekk om enheten er i stand til å sende e-post

Åpne? MailViewController.m? fil og bla ned til Openmail: handling og endre koden for å lese som følger:

 - (IBAction) openMail: (id) avsender if ([MFMailComposeViewController canSendMail])  annet UIAlertView * alert = [[UIAlertView-tildeling] initWithTitle: @ "Feil" -melding: @ "Enheten støtter ikke komponentarket" delegere: null avbrytButtonTitle: @ "OK" otherButtonTitles: null]; [varslingsutstilling]; [våken utgivelse]; 

Her kontrollerer vi om den nåværende enheten kan sende e-post med canSendMail klasse metode av MFMailComposeViewController. Du bør alltid ringe denne metoden før du åpner e-postgrensesnittet. Hvis enheten ikke kan sende e-post, bør du varsle brukeren (jeg har brukt en UIAlertView for dette).


Trinn 6: Vis postgrensesnittet

Hvis enheten kan sende e-post, viser vi e-postgrensesnittet. Gå til Openmail: handling og endre koden for å lese som følger:

 - (IBAction) openMail: (id) avsender if ([MFMailComposeViewController canSendMail]) MFMailComposeViewController * mailer = [[MFMailComposeViewController alloc] init]; mailer.mailComposeDelegate = selv; [mailer setSubject: @ "En melding fra MobileTuts +"]; NSArray * toRecipients = [NSArray arrayWithObjects: @ "[email protected]", @ "[email protected]", null]; [mailer setToRecipients: toRecipients]; Ullmage * myImage = [UIImage imageNamed: @ "mobiletuts-logo.png"]; NSData * imageData = UIImagePNGRepresentation (myImage); [mailer addAttachmentData: imageData mimeType: @ "image / png" fileName: @ "mobiletutsImage"]; NSString * emailBody = @ "Har du sett MobileTuts + nettsiden?"; [mailer setMessageBody: emailBody isHTML: NO]; [self presentModalViewController: mailer animated: YES]; [mailer release];  ellers UIAlertView * alert = [[UIAlertView-tildeling] initWithTitle: @ "Feil" -melding: @ "Enheten støtter ikke komponentarket" delegat: null annullerButtonTitle: @ "OK" otherButtonTitles: null]; [varslingsutstilling]; [våken utgivelse]; 

Først oppretter vi en MFMaileComposeViewController og kaller det? mailer ?. Vi satte mailComposeDelegate til selv, så vi kan se resultatet av posten. Faget er satt til? En melding fra MobileTuts + ?. Som du kan se, er toRecipients er av typen NSArray. Dette skyldes at du kan legge til flere mottakere. Jeg har lagt til to falske e-postadresser, men selvfølgelig kan du legge til hvilken adresse du liker. Deretter lagrer vi et bilde som en NSData objekt, fordi vi ikke kan sende en UIImage direkte. Da legger vi til NSData objekt som et vedlegg til vår e-post. Vi stiller typen til et png-bilde og filenavn til? MobiletutsImage ?. Dette betyr at når mottakeren sparer bildet, blir det lagret under navnet "mobiletutsImage". Den siste tingen vi gjør er å vise e-postøren før du frigjør e-postobjektet.


Trinn 7: Sjekk resultatet og avslå visningen

Du må manuelt avvise e-postgrensesnittet som svar på en delegatmetodeanrop. Legg til følgende kode under Openmail: handling:

 - (void) mailComposeController: (MFMailComposeViewController *) kontrolleren didFinishWithResult: (MFMailComposeResult) resultatfeil: (NSError *) feil switch (resultat) tilfelle MFMailComposeResultCancelled: NSLog (@ "Post avbrutt: du avbrutt operasjonen og ingen e-postmelding ble stilt i kø. "); gå i stykker; tilfelle MFMailComposeResultSaved: NSLog (@ "E-post lagret: du lagret e-postmeldingen i utkast-mappen."); gå i stykker; tilfelle MFMailComposeResultSent: NSLog (@ "Mail send: e-postmeldingen er i kø i utboksen. Den er klar til å sende."); gå i stykker; tilfelle MFMailComposeResultFailed: NSLog (@ "Mail mislyktes: e-postmeldingen ble ikke lagret eller i kø, muligens på grunn av en feil."); gå i stykker; standard: NSLog (@ "E-post ikke sendt."); gå i stykker;  // Fjern postvisningen [self dismissModalViewControllerAnimated: YES]; 

I denne delegatemetoden kontrollerer vi resultatet av at du har vist e-postvisningskontrollen med en bryteretning og deretter avviser visningsstyringen med en animasjon. I ovennevnte kode har jeg bare skrevet ut en NSLog melding med resultatene, men poenget er at du kan reagere dynamisk på brukerens handling.


BONUS: Gjør det til jobb for iPad

På en iPad ser det fint ut å vise e-postgrensesnittet i en sideliste presentasjon. Du kan gjøre det ved å legge til følgende linje av kode like ovenfor [self presentModalViewController: mailer animated: YES];:

 mailer.modalPresentationStyle = UIModalPresentationPageSheet;
яя я

Wrap Up

Jeg håper du likte denne opplæringen. Hvis du har tilbakemelding eller forespørsler om ytterligere iOS-innhold fra meg, vennligst legg igjen en kommentar nedenfor!