iphone sms

Inviare SMS In-app da iPhone

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

Related Posts

iOS Continuos Integration con Xcode 9

Rating in iOS

Come creare un framework in swift

Creazione di un CocoaPod

  • Ciao ho provato ad eseguire il progetto dell’app sms ed è andato tutto a buon fine.Ora volevo sapere come faccio a ricevere gli sms nella stessa app che ho creato ,seguendo questo tutorial? In pratica volevo costruire una vera e propria applicazione sms come quella presente già su iphone che permette di ricevere e mandare sms . Ora come ultima domanda volevo sapere come realizzare un applicazione simile a Emoji free ? grazie e spero in qualche vostra risposta o anche tutorial ve ne sarei molto grato grazie ciao

    • in base alle API oggi disponibili non puoi creare un’app per ricevere SMS. Oramai con iOS 5 sono state abbandonate le app per emoji in quanto la tastiera è stata integrata nel sistema. Comunque puoi guardare su http://unicode.org/faq/emoji_dingbats.html per tutte le informazioni su Unicode per creare emoji, e dovresti crearti una tastiera personalizza che poi applichi il font. Ovviamente i caratteri saranno visualizzati solo all’interno della tua app o di chi la usa.

    • Grazie mille sei stato gentilissimo a chiarirmi questo fatto

  • Ferruccio Ferruccio

    Ciao fabio,
    una domanda: è possibile inviare un sms senza aprire il modal l’applicazione sms?
    Mi spiego: posso realizzare un’app in cui premendo un button invio direttamente ad un numero destinatario un testo definito via codice come hai fatto vedere qui?
    Il tutto però senza che si apra la schermata con destinatari, tastiera e corpo del messaggio.
    Spero di essermi spiegato…

    grazie mille e complimenti:)

    • ti sei spiegato benissimo. purtroppo visto le azioni malevoli che si potrebbero creare consentendo l’invio di SMS, per di più a pagamento, senza conferma dell’utente la Apple ha proibito nel suo SDK l’invio via codice, anche se sei provvisto di tue librerie private ad hoc.

      • Ferruccio Ferruccio

        Ciao Fabio,
        grazie per la risposta… 
        temevo che non si potesse fare esattamente per le ragioni che hai detto.. anche se le mie intenzioni erano benevole:)..
        Beh, l’utente dovrà fare 2 tap in più… ma apprezzerà l’approccio…
        Grazie ancora…
        F.

      • Marco Lecce

        Sto sviluppando un app Nella quale è presente una tabella con vari numeri di telefono , quindi ogni cella contiene il proprio numero di telefono per esempio: cella 1 : 112 carabinieri
        Cella 2: 118 ambulanza ecc ecc per fare questo ho utilizzato un array che mi ha inserito tutti i dati nella tabella proprio come interessava a me quindi fin qua tutto ok .
        Adesso volevo che alla pressione di ogni singola cella mi partisse la chiamata al numero corrispondente presente nella cella premuta . Come faccio a implementare questa funzione , ho provato a usare UIApplication sharedapplication e questa si collega all’app nativa telefono facendo partire la chiamata , del numero inserito nella url tel://12345 quindi utilizza sempre lo stesso numero per ogni cella che premo, appunto voglio sapere come differenziare i numeri in base alle celle premute?Spero di essere stato chiaro il piú possibile e vi prego di aiutarmi grazie

Si prega di attivare i Javascript! / Please turn on Javascript!

Javaskripta ko calu karem! / Bitte schalten Sie Javascript!

S'il vous plaît activer Javascript! / Por favor, active Javascript!

Qing dakai JavaScript! / Qing dakai JavaScript!

Пожалуйста включите JavaScript! / Silakan aktifkan Javascript!