ios - usar - Como enviar programaticamente SMS no iPhone?




sincronizar mensagens iphone ipad (12)

Alguém sabe se é possível, e como, programaticamente enviar um SMS do iPhone , com o SDK / Cocoa Touch oficial?


Restrições

Se você puder enviar um SMS dentro de um programa no iPhone, poderá escrever jogos que enviam spam a pessoas em segundo plano. Tenho certeza que você realmente quer ter spams de seus amigos, "Experimente este novo jogo! Isso raxxers meus boxxers, e os seus serão também! Roxxersboxxers.com !!!! Se você se inscrever agora você vai ter 3.200 RB pontos!!"

A Apple tem restrições para operações de discagem e SMS automatizadas (ou até parcialmente automatizadas). (Imagine se o jogo em vez disso ligasse para o 911 em uma determinada hora do dia)

Sua melhor aposta é configurar um servidor intermediário na Internet que use um serviço de envio de SMS on-line e enviar o SMS por meio dessa rota se você precisar de automação completa. (ou seja, o seu programa no iPhone envia um pacote UDP para o seu servidor, que envia o SMS real)

Atualização do iOS 4

O iOS 4, no entanto, agora fornece um viewController você pode importar para o seu aplicativo. Você preencopula os campos SMS e, em seguida, o usuário pode iniciar o envio de SMS no controlador. Ao contrário do formato de URL "SMS: ...", isso permite que seu aplicativo permaneça aberto e permite que você preencha os campos to e body . Você pode até especificar vários destinatários.

Isso impede que aplicativos enviem SMS automáticos sem que o usuário tenha conhecimento disso. Você ainda não pode enviar SMS totalmente automatizado do próprio iPhone, isso requer alguma interação do usuário. Mas isso, pelo menos, permite que você preencha tudo e evite fechar o aplicativo.

A classe MFMessageComposeViewController está bem documentada e os tutorials mostram como é fácil implementá-la.

Atualização do iOS 5

O iOS 5 inclui mensagens para dispositivos iPod touch e iPad, por isso, embora eu ainda não tenha testado isso sozinho, é possível que todos os dispositivos iOS consigam enviar SMS via MFMessageComposeViewController. Se esse for o caso, a Apple está executando um servidor SMS que envia mensagens em nome de dispositivos que não possuem um modem celular.

Atualização do iOS 6

Nenhuma alteração para esta classe.

Atualização do iOS 7

Agora você pode verificar se o meio de mensagem que você está usando aceitará um assunto ou anexos e que tipo de anexos ele aceitará. Você pode editar o assunto e adicionar anexos à mensagem, onde a mídia permitir.

Atualização do iOS 8

Nenhuma alteração para esta classe.

Atualização do iOS 9

Nenhuma alteração para esta classe.

Atualização do iOS 10

Nenhuma alteração para esta classe.

Atualização do iOS 11

Nenhuma mudança significativa para esta classe

Limitações a esta classe

Tenha em mente que isso não funcionará em telefones sem o iOS 4 e não funcionará no iPod touch ou no iPad, exceto, talvez, no iOS 5. Você deve detectar as limitações do dispositivo e do iOS antes de usar este controlador ou restringir o seu aplicativo a 3Gs recentemente atualizados, 3GS e 4 iPhones.

No entanto, um servidor intermediário que envia SMS permitirá que qualquer um desses dispositivos iOS envie SMS, desde que eles tenham acesso à Internet, portanto, ainda pode ser uma solução melhor para muitos aplicativos. Como alternativa, use os dois e recorra a um serviço SMS on-line quando o dispositivo não for compatível.


  1. Você deve adicionar o MessageUI.framework ao seu projeto Xcode
  2. Inclua um #import <MessageUI/MessageUI.h> no seu arquivo de cabeçalho
  3. Adicione esses representantes ao seu arquivo de cabeçalho MFMessageComposeViewControllerDelegate & UINavigationControllerDelegate
  4. Em seu método IBAction declare a instância de MFMessageComposeViewController dizer messageInstance
  5. Para verificar se o seu dispositivo pode enviar o uso de texto [MFMessageComposeViewController canSendText] em uma condição if, ele retornará Sim / Não
  6. Na condição if , faça o seguinte:

    1. Primeiro conjunto corpo para sua messageInstance como:

      messageInstance.body = @"Hello from Shah";
    2. Em seguida, decida os destinatários da mensagem como:

      messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321",         nil];
    3. Defina um delegado para sua mensagemInstance como:

      messageInstance.messageComposeDelegate = self;
    4. Na última linha faça isso:

      [self presentModalViewController:messageInstance animated:YES];

Adicione o MessageUI.Framework e use o seguinte código

#import <MessageUI/MessageUI.h> 

E depois:

if ([MFMessageComposeViewController canSendText]) {
  MFMessageComposeViewController *messageComposer =
  [[MFMessageComposeViewController alloc] init];
  NSString *message = @"Your Message here";
  [messageComposer setBody:message];
  messageComposer.messageComposeDelegate = self;
  [self presentViewController:messageComposer animated:YES completion:nil];
}

e o método delegado -

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
             didFinishWithResult:(MessageComposeResult)result {
      [self dismissViewControllerAnimated:YES completion:nil];
 }

Aqui está a versão Swift do código para enviar SMS no iOS. Por favor, note que só funciona em dispositivos reais. Código testado no iOS 7 ou superior. Você pode ler mais here .

1) Crie uma nova classe que herde MFMessageComposeViewControllerDelegate e NSObject:

import Foundation
import MessageUI

class MessageComposer: NSObject, MFMessageComposeViewControllerDelegate {
    // A wrapper function to indicate whether or not a text message can be sent from the user's device
    func canSendText() -> Bool {
        return MFMessageComposeViewController.canSendText()
    }

    // Configures and returns a MFMessageComposeViewController instance
    func configuredMessageComposeViewController(textMessageRecipients:[String] ,textBody body:String) -> MFMessageComposeViewController {
        let messageComposeVC = MFMessageComposeViewController()
        messageComposeVC.messageComposeDelegate = self  //  Make sure to set this property to self, so that the controller can be dismissed!
        messageComposeVC.recipients = textMessageRecipients
        messageComposeVC.body = body
        return messageComposeVC
    }

    // MFMessageComposeViewControllerDelegate callback - dismisses the view controller when the user is finished with it
    func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {
        controller.dismissViewControllerAnimated(true, completion: nil)
        }
}

2) Como usar esta classe:

func openMessageComposerHelper(sender:AnyObject ,withIndexPath indexPath: NSIndexPath) {
    var recipients = [String]()

    //modify your recipients here

    if (messageComposer.canSendText()) {
        println("can send text")
        // Obtain a configured MFMessageComposeViewController
        let body = Utility.createInvitationMessageText()

        let messageComposeVC = messageComposer.configuredMessageComposeViewController(recipients, textBody: body)

        // Present the configured MFMessageComposeViewController instance
        // Note that the dismissal of the VC will be handled by the messageComposer instance,
        // since it implements the appropriate delegate call-back
        presentViewController(messageComposeVC, animated: true, completion: nil)
    } else {
        // Let the user know if his/her device isn't able to send text messages
        self.displayAlerViewWithTitle("Cannot Send Text Message", andMessage: "Your device is not able to send text messages.")
    }
}

Existe uma classe no iOS 4 que suporta o envio de mensagens com corpo e destinatários da sua aplicação. Funciona da mesma forma que enviar email. Você pode encontrar a documentação aqui: link text


Se você quiser, você pode usar o framework privado CoreTelephony que chama a classe CTMessageCenter . Existem alguns métodos para enviar sms.


Usa isto:

- (void)showSMSPicker
{
    Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));

    if (messageClass != nil) {          
        // Check whether the current device is configured for sending SMS messages
        if ([messageClass canSendText]) {
           [self displaySMSComposerSheet];
        }   
    }
}

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{       
    //feedbackMsg.hidden = NO;
    // Notifies users about errors associated with the interface
    switch (result)
    {
        case MessageComposeResultCancelled:
        {   
            UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:@"Message" message:@"SMS sending canceled!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
            [alert1 show];
            [alert1 release];
        }   

        // feedbackMsg.text = @"Result: SMS sending canceled";
        break;

        case MessageComposeResultSent:
        {
            UIAlertView *alert2 = [[UIAlertView alloc] initWithTitle:@"Message" message:@"SMS sent!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
            [alert2 show];
            [alert2 release];
        }   

        // feedbackMsg.text = @"Result: SMS sent";
        break;

        case MessageComposeResultFailed:
        {   
            UIAlertView *alert3 = [[UIAlertView alloc] initWithTitle:@"Message" message:@"SMS sending failed!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
            [alert3 show];
            [alert3 release];
        }   

        // feedbackMsg.text = @"Result: SMS sending failed";
        break;

        default:
        {   
            UIAlertView *alert4 = [[UIAlertView alloc] initWithTitle:@"Message" message:@"SMS not sent!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
            [alert4 show];
            [alert4 release];
        }   

        // feedbackMsg.text = @"Result: SMS not sent";
        break;
    }

    [self dismissModalViewControllerAnimated: YES];
}

Você pode apresentar MFMessageComposeViewController, que pode enviar SMS, mas com prompt de usuário (ele toca o botão Enviar). Não há como fazer isso sem a permissão do usuário. No iOS 11, você pode criar uma extensão, que pode ser como filtrar mensagens recebidas, dizendo ao iOS que é spam ou não. Nada mais com SMS não pode ser feito


Você pode usar um URL sms:[target phone number] para abrir o aplicativo SMS, mas não há indicações sobre como preencher um corpo de SMS com texto (consulte esta postagem nos Fóruns de desenvolvedores da Apple).


Você precisa usar o MFMessageComposeViewController se quiser mostrar a criação e o envio da mensagem em seu próprio aplicativo.

Caso contrário, você pode usar o método sharedApplication .


//Add the Framework in .h file

#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

//Set the delegate methods

UIViewController<UINavigationControllerDelegate,MFMessageComposeViewControllerDelegate>

//add the below code in .m file


- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];

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

    if([MFMessageComposeViewController canSendText])
    { 
        NSString *str= @"Hello";
        controller.body = str;
        controller.recipients = [NSArray arrayWithObjects:
                                 @"", nil];
        controller.delegate = self;
        [self presentModalViewController:controller animated:YES];  
    }


}

- (void)messageComposeViewController:
(MFMessageComposeViewController *)controller
                 didFinishWithResult:(MessageComposeResult)result 
{
    switch (result)
    {
        case MessageComposeResultCancelled:  
            NSLog(@"Cancelled");    
            break; 
        case MessageComposeResultFailed:
            NSLog(@"Failed");
            break;   
        case MessageComposeResultSent:      
            break; 
        default:  
            break;  
    }  
    [self dismissModalViewControllerAnimated:YES]; 
}

- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    UIImage *ui =resultimg.image;
    pasteboard.image = ui;
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
}




sms