Addirittura prima di iOS 4, gli sviluppatori dovevamo dipendere da questa riga di codice:

[[UIApplication sharedApplication] openURL: @\"sms:12345678\"];

iphone sms

Il problema era che non solo chiudeva l’applicazione ma non c’era nessun modo per specificare il corpo dell’SMS. Come seconda cosa, eri obbligato a poter inviare un SMS ad una sola persona. Comunque, oggi, ai tempi di iOS 5 le cose sono cambiate grazie al nuovo MessageUI SMS Controller.

Iniziamo a vedere come inviare SMS dalla nostra applicazione personalizzando tutti i campi.

Iniziamo

Creiamo un nuovo progetto di tipo Single-View Application ed importiamo il framework “MessageUI” nel nostro progetto.

Importiamolo nel nostro ViewController.h in modo da poterlo usare nel file d’implementazione.

#import <MessageUI/MessageUI.h>

Non dimentichiamoci inoltre di aggiungere il delegate MFMessageComposeViewControllerDelegate.

@interface ViewController : UIViewController<MFMessageComposeViewControllerDelegate>{

}

Spostiamoci nel file XIB o nello storyboard ed aggiungiamo un UIButton nell’interfaccia in modo da avere una IBAction dichiarata nel .h chiamata:

-(IBAction) sendInAppSMS:(id) sender;

Colleghiamola e passiamo al file di implementazione ViewController.m

- (IBAction)sendInAppSMS:(id)sender {

if([MFMessageComposeViewController canSendText]){

MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];

controller.body = @\"Ciao, iProg\";

controller.recipients = [NSArray arrayWithObjects:@\"12345678\", @\"87654321\", nil];

controller.messageComposeDelegate = self;

[self presentModalViewController:controller animated:YES];

}

else {

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@\"Errore\" message:@\"Non posso inviare SMS\" delegate:self cancelButtonTitle:@\"OK\" otherButtonTitles: nil];

[alert show];

}

}

In questo modo abbiamo impostato un controllo tramite canSendtext che ci avvisa se il dispositivo è in grado di inviare SMS e procedere di conseguenza.

Compiliamo i campi di corpo dell’SMS (body), dei destinatari (recipient) e mostriamo a schermo il controller di invio tipico di iOS.

Siccome abbiamo implementato il delegate possiamo ricevere informazioni riguardo lo status dell’invio.

Aggiungiamolo al nostro file .m

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{

switch (result) {

case MessageComposeResultCancelled:

NSLog(@\"Annullato\");

break;

case MessageComposeResultFailed:{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"Invio Fallito\" message:@\"Errore sconosciuto\"

delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles: nil];

[alert show];

[alert release];

break;}

case MessageComposeResultSent:

break;

default:

break;

}

[self dismissModalViewControllerAnimated:YES];

}

Abbiamo terminato. Provate ad eseguire l’applicazione su un dispositivo iPhone reale poiché il simulatore non è in grado di inviare SMS.

Dove diavolo è il tutorial su MMS e iMessage?

Attualmente, il framework MFMessageComposeViewController non supporta l’invio di MMS ed il corpo del messaggio è una NSString e facendola puntare ad un NSData ovviamente l’applicazione crasha.

SMS e iMessage vengono trattati allo stesso modo, infatti il sistema riconoscer