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.
- Você deve adicionar o MessageUI.framework ao seu projeto Xcode
- Inclua um
#import <MessageUI/MessageUI.h>
no seu arquivo de cabeçalho - Adicione esses representantes ao seu arquivo de cabeçalho
MFMessageComposeViewControllerDelegate
&UINavigationControllerDelegate
- Em seu método
IBAction
declare a instância deMFMessageComposeViewController
dizermessageInstance
- Para verificar se o seu dispositivo pode enviar o uso de texto
[MFMessageComposeViewController canSendText]
em uma condição if, ele retornará Sim / Não Na condição
if
, faça o seguinte:Primeiro conjunto corpo para sua
messageInstance
como:messageInstance.body = @"Hello from Shah";
Em seguida, decida os destinatários da mensagem como:
messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321", nil];
Defina um delegado para sua mensagemInstance como:
messageInstance.messageComposeDelegate = self;
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:"]];
}