BLOG
FILTROS
TAGS MAIS USADAS
Enviando SMS de dentro de um aplicativo iPhone
-
AUTOR
Quintana
TAGs desenvolvimento, iphone sdk
3 COMENTÁRIOS-
Tweet
O envio do chamado In-App SMS é uma das novidades do iOS4. Ela pode ser muito útil em aplicativos como o Cine Mobits, onde um usuário poderá enviar convites via SMS a seus amigos para assistir um determinado filme. Contudo, como podemos implementar uma funcionalidade útil como essa do iOS 4 sem perder a compatibilidade com os sistemas operacionais anteriores e nem com os dispositivos, como o iPod Touch que não tem SMS?
Simples! O primeiro passo é baixar o Xcode do iOS 4. Com ele você vai reparar que não é mais possível compilar aplicações para o iOS 3, apenas para o 4.0 ou para o 3.2 (iPad). Para que dispositivos com sistemas operacionais anteriores possam rodar um aplicativo compilado em 4.0 é preciso primeiro alterar o Deployment target do seu projeto para a mínima versão que você quer que o app execute.

Ao fazer isso, a Apple recomenda que você verifique se as funções que irá utilizar (especialmente as novas APIs) estão presentes no dispositivo. Para fazer isso no nosso exemplo do SMS, é só fazer o seguinte código:
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
// Verifica se a classe existe no sistema operacional
if (messageClass != nil) {
// Checa se o dispositivo pode enviar SMS
if ([messageClass canSendText]) {
[self displaySMSComposerSheet];
}
else {
feedbackMsg.hidden = NO;
feedbackMsg.text = @"Esse dispositivo não pode enviar SMS.";
}
}
else {
feedbackMsg.hidden = NO;
feedbackMsg.text = @"Esse dispositivo não pode enviar SMS.";
}
Reparem que para evitar um erro de execução em sistemas operacionais a classe MFMailComposeViewController não foi chamada diretamente. Depois disso, também precisamos verificar o caso do dispositivo possuir ou não suporte a SMS.
Para enfim enviar o SMS, temos que usar o MFMessageComposeViewController, que é a tela onde escrevemos o SMS que nem no app original do iPhone, ou seja, a Apple não permite que o aplicativo envie um SMS sem a confirmação do usuário. A única vantagem é que não precisamos mais sair do app e podemos colocar uma mensagem e vários números de telefone na tela:
-(void)displaySMSComposerSheet
{
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
picker.body = @"Teste de SMS do iPhone";
picker.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321", nil];
picker.messageComposeDelegate = self;
[self presentModalViewController:picker animated:YES];
[picker release];
}
Essa é a imagem da tela de envio de SMS:
Em breve vamos implementar essa funcionalidade no Cine Mobits, bem como nas versões Java e Android onde ela já existe. Até a próxima!
3 COMENTÁRIOs
-
Raphael 02/09/2010, 20:09
É importante também ressaltar que o import do framework MessageUI deve ser feito como weak!
-
Cadu 23/12/2010, 10:55
Olá, Quintana!
Sabe dizer se setarmos o Deployment Target com uma versão antiga, ocorreria erro de compilação ao tentarmos usar alguma API inexistente nessa versão?
-
Quintana 23/12/2010, 11:12
Oi Cadu,
o deployment target pode ser de uma versão antiga sim e não causa erro de compilação, o que causa é erro de execução caso você não importe a API como 'weak', se você fizer tudo certo ele funcionará tanto para as versões que possuem SMS quanto para as mais antigas, como o Cine Mobits funciona.
Abraços,





+55 21 3553-1898