Addirittura prima di iOS 4, gli sviluppatori dovevamo dipendere da questa riga di codice:
[code lang=”obj-c”][[UIApplication sharedApplication] openURL: @\”sms:12345678\”];[/code]
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.
[code lang=”obj-c”]#import <MessageUI/MessageUI.h>[/code]
Non dimentichiamoci inoltre di aggiungere il delegate MFMessageComposeViewControllerDelegate.
[code lang=”obj-c”]
@interface ViewController : UIViewController<MFMessageComposeViewControllerDelegate>{
}
[/code]
Spostiamoci nel file XIB o nello storyboard ed aggiungiamo un UIButton nell’interfaccia in modo da avere una IBAction dichiarata nel .h chiamata:
[code lang=”obj-c”]-(IBAction) sendInAppSMS:(id) sender;[/code]
Colleghiamola e passiamo al file di implementazione ViewController.m
[code lang=”obj-c”]- (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];
}
}
[/code]
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
[code lang=”obj-c”]
– (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];
}
[/code]
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