Question Comment envoyer des SMS par programme sur l'iPhone?


Est-ce que quelqu'un sait si c'est possible, et comment, envoyer par programme un SMS du iPhone, avec le SDK / Cocoa Touch officiel?


496
2017-08-14 09:51


origine


Réponses:


Restrictions

Si vous pouviez envoyer un SMS au sein d’un programme sur l’iPhone, vous pourrez écrire des jeux qui spamment des personnes en arrière-plan. Je suis sûr que vous voulez vraiment avoir des spams de vos amis, "Essayez ce nouveau jeu! Il roxxers mes boxxers, et le vôtre sera aussi! Roxxersboxxers.com !!!! Si vous vous inscrivez maintenant, vous aurez 3200 RB points!!"

Apple a des restrictions sur les opérations de SMS et de numérotation automatisées (ou même partiellement automatisées). (Imaginez si le jeu a plutôt composé le 911 à un moment précis de la journée)

Votre meilleur pari est de configurer un serveur intermédiaire sur Internet qui utilise un service d'envoi de SMS en ligne, et d'envoyer les SMS via cette route si vous avez besoin d'une automatisation complète. (c'est-à-dire que votre programme sur l'iPhone envoie un paquet UDP à votre serveur, qui envoie le vrai SMS)

Mise à jour iOS 4

iOS 4, cependant, fournit maintenant un viewcontroller que vous pouvez importer dans votre application. Vous pré-remplissez les champs SMS, puis l'utilisateur peut lancer l'envoi de SMS dans le contrôleur. Contrairement à l’utilisation du format d’URL "sms: ...", cela permet à votre application de rester ouverte et de remplir à la fois le à et le corps des champs. Vous pouvez même spécifier plusieurs destinataires.

Cela empêche les applications d'envoyer des SMS automatisés sans que l'utilisateur en ait explicitement conscience. Vous ne pouvez toujours pas envoyer de SMS entièrement automatisés depuis l'iPhone lui-même, cela nécessite une certaine interaction de l'utilisateur. Mais cela vous permet au moins de tout remplir et évite de fermer l'application.

le MFMessageComposeViewController classe est bien documentée, et tutoriels montrer à quel point il est facile à mettre en œuvre.

Mise à jour iOS 5

iOS 5 inclut la messagerie pour les appareils iPod touch et iPad, donc bien que je ne l'ai pas encore testé moi-même, il se peut que tous les appareils iOS puissent envoyer des SMS via MFMessageComposeViewController. Si tel est le cas, Apple exécute alors un serveur SMS qui envoie des messages au nom de périphériques ne disposant pas de modem cellulaire.

Mise à jour iOS 6

Aucun changement à cette classe.

Mise à jour iOS 7

Vous pouvez maintenant vérifier si le support que vous utilisez acceptera un sujet ou des pièces jointes, et quel type de pièces jointes il acceptera. Vous pouvez modifier le sujet et ajouter des pièces jointes au message, là où le support le permet.

Mise à jour iOS 8

Aucun changement à cette classe.

Mise à jour iOS 9

Aucun changement à cette classe.

Mise à jour iOS 10

Aucun changement à cette classe.

Mise à jour iOS 11

Aucun changement significatif à cette classe

Limitations à cette classe

Gardez à l'esprit que cela ne fonctionnera pas sur les téléphones sans iOS 4, et il ne fonctionnera pas sur l'iPod touch ou l'iPad, sauf, peut-être, sous iOS 5. Vous devez soit détecter l'appareil et les limitations iOS avant d'utiliser ce contrôleur, ou risque de restreindre votre application aux téléphones 3G, 3GS et 4 récemment mis à niveau.

Cependant, un serveur intermédiaire qui envoie des SMS permettra à tous ces appareils iOS d’envoyer des SMS tant qu’ils auront accès à Internet, ce qui peut constituer une meilleure solution pour de nombreuses applications. Vous pouvez également utiliser les deux et revenir à un service SMS en ligne lorsque le périphérique ne le prend pas en charge.


384
2017-09-12 15:00



Voici un tutoriel qui fait exactement ce que vous cherchez: le MFMessageComposeViewController.

http://blog.mugunthkumar.com/coding/iphone-tutorial-how-to-send-in-app-sms/

Essentiellement:

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];
}

Et un lien vers les docs.

https://developer.apple.com/documentation/messageui/mfmessagecomposeviewcontroller


136
2017-07-24 19:09



  1. Vous devez ajouter le MessageUI.framework à votre projet Xcode
  2. Inclure un #import <MessageUI/MessageUI.h> dans votre fichier d'en-tête
  3. Ajoutez ces délégués à votre fichier d'en-tête MFMessageComposeViewControllerDelegate  & UINavigationControllerDelegate
  4. Dans ton IBAction méthode déclarer instance de MFMessageComposeViewController dire messageInstance
  5. Pour vérifier si votre appareil peut envoyer du texte [MFMessageComposeViewController canSendText] dans une condition si, il retournera oui / non
  6. dans le if condition faites-les:

    1. Premier corps pour votre messageInstance comme:

      messageInstance.body = @"Hello from Shah";
      
    2. Puis décidez les destinataires du message comme:

      messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321",         nil];
      
    3. Définissez un délégué sur votre messageInstance en tant que:

      messageInstance.messageComposeDelegate = self;
      
    4. Dans la dernière ligne, faites ceci:

      [self presentModalViewController:messageInstance animated:YES];
      

98
2017-12-07 16:50



Vous pouvez utiliser un sms:[target phone number] URL pour ouvrir l'application SMS, mais il n'y a aucune indication sur la façon de pré-remplir un corps SMS avec du texte (voir ce post sur les Forums des développeurs Apple).


48
2017-09-12 14:41



L'un des systèmes de communication inter-processus dans MacOS est XPC. Cette couche système a été développée pour la communication inter-processus basée sur le transfert de structures de plist utilisant libSystem et launchd. En fait, c'est une interface qui permet de gérer les processus via l'échange de structures telles que les dictionnaires. En raison de l'hérédité, iOS 5 possède également ce mécanisme.

Vous pourriez déjà comprendre ce que je veux dire par cette introduction. Oui, il existe des services système dans iOS qui incluent des outils pour la communication XPC. Et je veux illustrer le travail avec un démon pour l'envoi de SMS. Cependant, il convient de mentionner que cette capacité est corrigée dans iOS 6, mais est pertinente pour iOS 5.0-5.1.1. Jailbreak, Private Framework et autres outils illégaux ne sont pas requis pour son exploitation. Seul l'ensemble des fichiers d'en-tête du répertoire / usr / include / xpc / * est requis.

L’un des éléments de l’envoi de SMS dans iOS est le service système com.apple.chatkit, dont les tâches incluent la génération, la gestion et l’envoi de messages texte courts. Pour la facilité du contrôle, il a le port de communication disponible publiquement com.apple.chatkit.clientcomposeserver.xpc. Grâce au sous-système XPC, vous pouvez générer et envoyer des messages sans l'approbation de l'utilisateur.

Eh bien, essayons de créer une connexion.

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);

Maintenant, nous avons la connexion XPC myConnection au service d'envoi de SMS. Cependant, la configuration XPC permet la création de connexions suspendues - nous devons faire un pas de plus pour l'activation.

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 connexion est activée. Juste à ce moment, iOS 6 affichera dans le journal téléphonique un message indiquant que ce type de communication est interdit. Maintenant, nous devons générer un dictionnaire similaire à xpc_dictionary avec les données requises pour l'envoi du message.

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!");

Il en reste peu: envoyez le message au port XPC et assurez-vous qu'il est livré.

xpc_connection_send_message(myConnection, mydict);
xpc_connection_send_barrier(myConnection, ^{
NSLog(@"The message has been successfully delivered");
});

C'est tout. SMS envoyé.


25
2017-10-25 07:17



Ajoutez le MessageUI.Framework et utilisez le code suivant

#import <MessageUI/MessageUI.h> 

Et alors:

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];
}

et la méthode des délégués -

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

21
2018-05-10 21:38



Vous pouvez utiliser cette approche:

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:MobileNumber"]]


iOS naviguera automatiquement de votre application à la page de composition des messages de l'application de messagerie. Comme le schéma de l'URL commence par sms:, il est identifié comme un type reconnu par l'application de messagerie et lancé.


19
2018-02-26 07:13



Suivez ces procédures

1 .Ajouter MessageUI.Framework projeterenter image description here

2. Importer #import <MessageUI/MessageUI.h> dans le fichier .h

3. Copiez ce code pour envoyer un message

 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. Mettre en place delegate méthode si vous voulez.

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{


   ///your stuff here 

    [self dismissViewControllerAnimated:YES completion:nil];
}

Courir et aller!


12
2017-07-29 10:32