ios - una - no puedo enviar mensajes de texto iphone 6
¿Cómo enviar SMS programáticamente al iPhone? (18)
Restricciones
Si pudieras enviar un SMS dentro de un programa en el iPhone, podrás escribir juegos que envíen correo no deseado a personas en segundo plano. Estoy seguro de que realmente quieres recibir mensajes de spam de tus amigos, "¡Prueba este nuevo juego! ¡Viva a mis boxxers, y el tuyo también lo estará! ¡Roxxersboxxers.com! Si te registras ahora, obtendrás 3,200 RB ¡¡puntos!!"
Apple tiene restricciones para las operaciones automatizadas (o incluso parcialmente automatizadas) de SMS y marcación. (Imagínese si el juego marcó el 911 en un momento determinado del día)
Su mejor opción es configurar un servidor intermedio en Internet que utilice un servicio de envío de SMS en línea y enviar los SMS a través de esa ruta si necesita una automatización completa. (es decir, su programa en el iPhone envía un paquete UDP a su servidor, que envía el verdadero SMS)
Actualización de iOS 4
Sin embargo, iOS 4 ahora proporciona un controlador de vista que puede importar a su aplicación. Rellena previamente los campos de SMS, luego el usuario puede iniciar el envío de SMS dentro del controlador. A diferencia del uso del formato de url "sms: ...", esto permite que su aplicación permanezca abierta y le permita rellenar los campos de to y body . Incluso puede especificar múltiples destinatarios.
Esto evita que las aplicaciones envíen SMS automatizados sin que el usuario lo sepa explícitamente. Aún no puede enviar SMS completamente automatizados desde el propio iPhone, requiere alguna interacción del usuario. Pero al menos esto le permite rellenar todo y evita cerrar la aplicación.
La clase MFMessageComposeViewController está bien documentada y los tutorials muestran lo fácil que es implementar.
Actualización de iOS 5
iOS 5 incluye mensajes para iPod touch y dispositivos iPad, por lo que, aunque todavía no lo he probado, es posible que todos los dispositivos iOS puedan enviar SMS a través de MFMessageComposeViewController. Si este es el caso, entonces Apple está ejecutando un servidor de SMS que envía mensajes en nombre de dispositivos que no tienen un módem celular.
Actualización de iOS 6
No hay cambios en esta clase.
Actualización de iOS 7
Ahora puede verificar si el medio de mensaje que está utilizando acepta un asunto o archivos adjuntos, y qué tipo de archivos adjuntos aceptará. Puede editar el asunto y agregar archivos adjuntos al mensaje, donde el medio lo permita.
Actualización de iOS 8
No hay cambios en esta clase.
Actualización de iOS 9
No hay cambios en esta clase.
Actualización de iOS 10
No hay cambios en esta clase.
Actualización de iOS 11
No hay cambios significativos en esta clase.
Limitaciones a esta clase
Tenga en cuenta que esto no funcionará en los teléfonos sin iOS 4, y no funcionará en el iPod touch ni en el iPad, excepto, quizás, en iOS 5. Antes de usarlo, debe detectar las limitaciones del dispositivo y de iOS. controlador, o riesgo de restringir su aplicación a 3G, 3GS y 4 iPhones recientemente actualizados.
Sin embargo, un servidor intermedio que envía SMS permitirá que todos estos dispositivos iOS envíen SMS siempre que tengan acceso a Internet, por lo que aún puede ser una mejor solución para muchas aplicaciones. Alternativamente, use ambos, y solo recurra a un servicio de SMS en línea cuando el dispositivo no lo admite.
¿Alguien sabe si es posible, y cómo, enviar mediante programación un SMS desde el iPhone
, con el SDK / Cocoa Touch oficial?
- Debe agregar el MessageUI.framework a su proyecto Xcode
- Incluya un
#import <MessageUI/MessageUI.h>
en su archivo de encabezado - Agregue estos delegados a su archivo de encabezado
MFMessageComposeViewControllerDelegate
&UINavigationControllerDelegate
- En su método
IBAction
declare la instancia deMFMessageComposeViewController
saymessageInstance
- Para verificar si su dispositivo puede enviar texto, use
[MFMessageComposeViewController canSendText]
en una condición if, devolverá Sí / No En la condición
if
hacen estos:Primero establece el cuerpo de tu
messageInstance
lamessageInstance
como:messageInstance.body = @"Hello from Shah";
Luego, decida los destinatarios del mensaje como:
messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321", nil];
Establezca un delegado en su mensajeEnstancia como:
messageInstance.messageComposeDelegate = self;
En la última línea haz esto:
[self presentModalViewController:messageInstance animated:YES];
// método de llamada con nombre y número.
-(void)openMessageViewWithName:(NSString*)contactName withPhone:(NSString *)phone{
CTTelephonyNetworkInfo *networkInfo=[[CTTelephonyNetworkInfo alloc]init];
CTCarrier *carrier=networkInfo.subscriberCellularProvider;
NSString *Countrycode = carrier.isoCountryCode;
if ([Countrycode length]>0) //Check If Sim Inserted
{
[self sendSMS:msg recipientList:[NSMutableArray arrayWithObject:phone]];
}
else
{
[AlertHelper showAlert:@"Message" withMessage:@"No sim card inserted"];
}
}
// Método para enviar mensaje
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSMutableArray *)recipients{
MFMessageComposeViewController *controller1 = [[MFMessageComposeViewController alloc] init] ;
controller1 = [[MFMessageComposeViewController alloc] init] ;
if([MFMessageComposeViewController canSendText])
{
controller1.body = bodyOfMessage;
controller1.recipients = recipients;
controller1.messageComposeDelegate = self;
[self presentViewController:controller1 animated:YES completion:Nil];
}
}
Agregue el MessageUI.Framework y use el siguiente código
#import <MessageUI/MessageUI.h>
Y entonces:
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];
}
y el método de delegado -
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
didFinishWithResult:(MessageComposeResult)result {
[self dismissViewControllerAnimated:YES completion:nil];
}
Aquí está la versión Swift del código para enviar SMS en iOS. Tenga en cuenta que solo funciona en dispositivos reales. Código probado en iOS 7+. Puedes leer más here .
1) Cree una nueva clase que herede MFMessageComposeViewControllerDelegate y 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) Cómo usar esta clase:
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.")
}
}
Aquí hay un tutorial que hace exactamente lo que está buscando: el MFMessageComposeViewController
.
Esencialmente:
MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];
if([MFMessageComposeViewController canSendText])
{
controller.body = @"SMS message here";
controller.recipients = [NSArray arrayWithObjects:@"1(234)567-8910", nil];
controller.messageComposeDelegate = self;
[self presentModalViewController:controller animated:YES];
}
Y un enlace a los documentos.
https://developer.apple.com/documentation/messageui/mfmessagecomposeviewcontroller
Hay una clase en iOS 4 que admite el envío de mensajes con cuerpo y destinatarios desde su aplicación. Funciona igual que el envío de correo. Puedes encontrar la documentación aquí: link text
Puede presentar MFMessageComposeViewController, que puede enviar SMS, pero con aviso del usuario (pulsa el botón enviar). No hay manera de hacerlo sin permiso del usuario. En iOS 11, puede hacer una extensión, que puede ser como un filtro para los mensajes entrantes, indicando a iOS si es spam o no. Nada más con SMS no se puede hacer.
Puede usar la URL de sms:[target phone number]
para abrir la aplicación SMS, pero no hay indicaciones sobre cómo rellenar previamente un cuerpo de SMS con texto (consulte esta publicación en los foros de desarrolladores de Apple).
Puede utilizar este enfoque:
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:MobileNumber"]]
iOS navegará automáticamente desde su aplicación a la página de composición de mensajes de la aplicación de mensajes. Dado que el esquema de la URL comienza con sms :, esto se identifica como un tipo que la aplicación de mensajes reconoce y lo inicia.
Si lo desea, puede usar el marco privado CoreTelephony
que llamó a la clase CTMessageCenter
. Hay algunos métodos para enviar sms.
Uno de los sistemas de comunicación entre procesos en MacOS es XPC. Esta capa del sistema se ha desarrollado para la comunicación entre procesos basada en la transferencia de estructuras plist mediante libSystem y launchd. De hecho, es una interfaz que permite administrar procesos a través del intercambio de estructuras como los diccionarios. Debido a la herencia, iOS 5 posee este mecanismo también.
Es posible que ya entiendas lo que quiero decir con esta introducción. Sí, hay servicios de sistema en iOS que incluyen herramientas para la comunicación XPC. Y quiero ejemplificar el trabajo con un demonio para el envío de SMS. Sin embargo, debe mencionarse que esta capacidad está corregida en iOS 6, pero es relevante para iOS 5.0—5.1.1. Jailbreak, Private Framework y otras herramientas ilegales no se requieren para su explotación. Solo se necesita el conjunto de archivos de encabezado del directorio / usr / include / xpc / *.
Uno de los elementos para el envío de SMS en iOS es el servicio del sistema com.apple.chatkit, cuyas tareas incluyen la generación, administración y envío de mensajes de texto cortos. Para facilitar el control, tiene el puerto de comunicación disponible públicamente com.apple.chatkit.clientcomposeserver.xpc. Usando el subsistema XPC, puede generar y enviar mensajes sin la aprobación del usuario.
Bueno, vamos a tratar de crear una conexión.
xpc_connection_t myConnection;
dispatch_queue_t queue = dispatch_queue_create("com.apple.chatkit.clientcomposeserver.xpc", DISPATCH_QUEUE_CONCURRENT);
myConnection = xpc_connection_create_mach_service("com.apple.chatkit.clientcomposeserver.xpc", queue, XPC_CONNECTION_MACH_SERVICE_PRIVILEGED);
Ahora tenemos la conexión XPC myConnection configurada para el servicio de envío de SMS. Sin embargo, la configuración de XPC permite la creación de conexiones suspendidas, necesitamos dar un paso más para la activación.
xpc_connection_set_event_handler(myConnection, ^(xpc_object_t event){
xpc_type_t xtype = xpc_get_type(event);
if(XPC_TYPE_ERROR == xtype)
{
NSLog(@"XPC sandbox connection error: %s/n", xpc_dictionary_get_string(event, XPC_ERROR_KEY_DESCRIPTION));
}
// Always set an event handler. More on this later.
NSLog(@"Received a message event!");
});
xpc_connection_resume(myConnection);
La conexión está activada. Justo en este momento, iOS 6 mostrará un mensaje en el registro telefónico de que este tipo de comunicación está prohibido. Ahora necesitamos generar un diccionario similar a xpc_dictionary con los datos necesarios para el envío del mensaje.
NSArray *recipient = [NSArray arrayWithObjects:@"+7 (90*) 000-00-00", nil];
NSData *ser_rec = [NSPropertyListSerialization dataWithPropertyList:recipient format:200 options:0 error:NULL];
xpc_object_t mydict = xpc_dictionary_create(0, 0, 0);
xpc_dictionary_set_int64(mydict, "message-type", 0);
xpc_dictionary_set_data(mydict, "recipients", [ser_rec bytes], [ser_rec length]);
xpc_dictionary_set_string(mydict, "text", "hello from your application!");
Queda poco: envíe el mensaje al puerto XPC y asegúrese de que esté entregado.
xpc_connection_send_message(myConnection, mydict);
xpc_connection_send_barrier(myConnection, ^{
NSLog(@"The message has been successfully delivered");
});
Eso es todo. SMS enviado.
Utilizar esta:
- (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];
}
Debe usar el MFMessageComposeViewController si desea mostrar cómo crear y enviar el mensaje en su propia aplicación.
De lo contrario, puede utilizar el método sharedApplication .
Sigue estos procedimientos
1 .Agregar MessageUI.Framework
al proyecto
2. Importe #import <MessageUI/MessageUI.h>
en el archivo .h.
3. Copia este código para enviar mensaje
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *messageComposer =
[[MFMessageComposeViewController alloc] init];
NSString *message = @"Message!!!";
[messageComposer setBody:message];
messageComposer.messageComposeDelegate = self;
[self presentViewController:messageComposer animated:YES completion:nil];
}
4. Implementar el método de delegate
si lo desea.
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
///your stuff here
[self dismissViewControllerAnimated:YES completion:nil];
}
Corre y ve
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
UIImage *ui =resultimg.image;
pasteboard.image = ui;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
}
//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];
}
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]]
Esta sería la mejor y corta manera de hacerlo.