ios - vers - Comment envoyer des SMS par programme sur l'iPhone?




transfert sms iphone vers ipad (13)

Restrictions

Si vous pouviez envoyer un SMS dans un programme sur l'iPhone, vous pourrez créer des jeux qui envoient des spams 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 3 200 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, 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 au format url "sms: ...", cela permet à votre application de rester ouverte, et vous permet de remplir les champs " to" et " body" . 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.

La classe MFMessageComposeViewController est bien documentée et les tutorials montrent à quel point il est facile à implémenter.

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 lance un serveur SMS qui envoie des messages au nom des périphériques qui n'ont pas de modem cellulaire.

Mise à jour iOS 6

Aucun changement à cette classe.

Mise à jour iOS 7

Vous pouvez maintenant vérifier si le support de message que vous utilisez accepte 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 ou risque de restreindre votre application à des iPhone 3G, 3GS et 4 iPhones récemment mis à jour.

Cependant, un serveur intermédiaire qui envoie des SMS permettra à tous ces appareils iOS d'envoyer des SMS aussi longtemps qu'ils auront accès à Internet, alors cela peut être une meilleure solution pour de nombreuses applications. Alternativement, utilisez les deux, et revenez à un service SMS en ligne uniquement lorsque l'appareil ne le prend pas en charge.

Est-ce que quelqu'un sait s'il est possible, et comment, d'envoyer par SMS un SMS depuis l' iPhone , avec le SDK / Cocoa Touch officiel?


  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 votre méthode IBAction , déclarez l'instance de MFMessageComposeViewController say messageInstance
  5. Pour vérifier si votre appareil peut envoyer du texte, utilisez [MFMessageComposeViewController canSendText] dans une condition if, il retournera Oui / Non
  6. Dans la condition if , procédez comme suit:

    1. Premier corps de votre messageInstance :

      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 comme:

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

      [self presentModalViewController:messageInstance animated:YES];
      

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

Beaucoup de réponses mais si vous avez vraiment besoin de SmS automatiquement et de ne pas utiliser le compositeur, vous pouvez simplement appeler le twilio api.

Et voici une liste de plus de 50 API pour l'envoi de SMS à partir de la plupart des applications.


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 d'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 nécessaire.

L'un des éléments de l'envoi de SMS dans iOS est le service système com.apple.chatkit, dont les tâches comprennent la génération, la gestion et l'envoi de messages courts. Pour la facilité du contrôle, il a le port de communication disponible publiquement com.apple.chatkit.clientcomposeserver.xpc. En utilisant le 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 de XPC prévoit 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é.


Si vous le souhaitez, vous pouvez utiliser le framework privé CoreTelephony qui s'appelle CTMessageCenter class. Il y a quelques méthodes pour envoyer des sms.


Voici la version Swift du code pour envoyer des SMS dans iOS. S'il vous plaît noter que cela ne fonctionne que dans les appareils réels. Code testé sous iOS 7+. Vous pouvez lire plus here .

1) Créez une nouvelle classe qui hérite MFMessageComposeViewControllerDelegate et 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) Comment utiliser cette 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.")
    }
}

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

tutorials

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


Vous pouvez présenter MFMessageComposeViewController, qui peut envoyer des SMS, mais avec l'invite de l'utilisateur (il appuie sur le bouton d'envoi). Pas moyen de le faire sans la permission de l'utilisateur. Sur iOS 11, vous pouvez faire une extension, qui peut être comme un filtre pour les messages entrants, en disant à iOS soit son spam ou non. Rien de plus avec SMS ne peut être fait


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é.


Suivez ces procédures

1 .Ajouter MessageUI.Framework au projet

2. Importez #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. Implémentez la méthode delegate si vous le souhaitez.

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


   ///your stuff here 

    [self dismissViewControllerAnimated:YES completion:nil];
}

Courir et GO!


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

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

Ce serait le meilleur et le plus court pour le faire.





sms