BLOG

Acompanhe a Mobits pelo RSS

FILTROS

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.

Xcode

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:

In App 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!

COMPARTILHE

3 COMENTÁRIOs

  1. Raphael 02/09/2010, 20:09

    É importante também ressaltar que o import do framework MessageUI deve ser feito como weak!

  2. 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?

  3. 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,

DEIXE UM COMENTÁRIO

If you can read this, you don't use a typical webbrowser that plays nice with CSS.
Please do not fill in anything here!