Как программно отправить смс на айфон?

Кто-нибудь знает, возможно ли и как программно отправить SMS с iPhone, с официальным SDK / Cocoa Touch?

вопрос задан 14.08.2008
Guy
7658 репутация

19 ответов


  • 0 рейтинг

    Вот Swift-версия кода для отправки SMS в iOS. Обратите внимание, что это работает только в реальных устройствах. Код протестирован в iOS 7+. Вы можете прочитать больше здесь .

    1) Создайте новый класс, который наследует MFMessageComposeViewControllerDelegate и 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) Как использовать этот класс:

    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.")
        }
    }
    
    ответ дан grandagile, с репутацией 594, 23.05.2015
  • 0 рейтинг

    Вот учебник, который делает именно то, что вы ищете: MFMessageComposeViewController.

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

    По существу:

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

    И ссылка на документы.

    https: // разработчик. яблоко. ru / documents / messageui / mfmessagecomposeviewcontroller

    ответ дан Daniel Amitay, с репутацией 6489, 24.07.2010
  • 0 рейтинг

    Вы можете использовать URL-адрес sms:[target phone number] для открытия приложения SMS, но нет никаких указаний о том, как предварительно заполнить текст SMS текстом (см. этот пост на форумах разработчиков Apple).

    ответ дан millenomi, с репутацией 5932, 12.09.2008
  • 0 рейтинг

    Много ответов, но если вам действительно нужно SmS автоматически и без использования композитора, вы можете просто вызвать twilio api.

    А вот список с 50+ API для отправки смс из практически любого приложения.

    ответ дан Stephane Paul, с репутацией 154, 28.06.2015
  • 0 рейтинг

    Используйте это:

    - (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];
    }
    
    ответ дан Rock, с репутацией 336, 18.05.2012
  • 0 рейтинг

    Вам необходимо использовать MFMessageComposeViewController , если вы хотите показать создание и отправку сообщения в вашем собственном приложении.

    В противном случае вы можете использовать метод sharedApplication .

    ответ дан parvind, с репутацией 629, 30.03.2015
  • 0 рейтинг
    - (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
    {
        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        UIImage *ui =resultimg.image;
        pasteboard.image = ui;
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
    }
    
    ответ дан mandeep, с репутацией 333, 9.09.2013
  • 0 рейтинг

    Ограничения

    Если бы вы могли отправить SMS в рамках программы на iPhone, вы сможете писать игры, которые спамят людей в фоновом режиме. Я уверен, что вы действительно хотите получать спам от своих друзей: «Попробуйте эту новую игру! Это roxxers мои boxxers, и ваш будет тоже! roxxersboxxers. ком! ! ! ! Если вы зарегистрируетесь сейчас, вы получите 3200 баллов RB! ! "

    Apple имеет ограничения для автоматизированных (или даже частично автоматизированных) операций SMS и набора номера. (Представьте, что игра набрала 911 в определенное время суток)

    Лучше всего настроить промежуточный сервер в Интернете, который использует онлайн-службу отправки SMS-сообщений, и отправлять SMS-сообщения по этому маршруту, если вам нужна полная автоматизация. (т.е. ваша программа на iPhone отправляет UDP-пакет на ваш сервер, который отправляет реальное SMS)

    iOS 4 обновление

    iOS 4, однако, теперь предоставляет viewcontroller, который вы можете импортировать в ваше приложение. Вы предварительно заполняете поля SMS, после чего пользователь может инициировать отправку SMS внутри контроллера. В отличие от использования "смс :. , , «Формат url, это позволяет вашему приложению оставаться открытым и позволяет заполнять поля с по и body . Вы даже можете указать несколько получателей.

    Это предотвращает отправку приложениями автоматизированных SMS без явного уведомления пользователя. Вы все еще не можете отправить полностью автоматизированное SMS с самого iPhone, это требует некоторого взаимодействия с пользователем. Но это по крайней мере позволяет вам заполнить все и избежать закрытия приложения.

    Класс MFMessageComposeViewController хорошо документирован, а учебники показывают, насколько легко это реализовать.

    iOS 5 Обновление

    iOS 5 включает в себя обмен сообщениями для устройств iPod touch и iPad, поэтому, хотя я сам еще не проверял это, возможно, все устройства iOS смогут отправлять SMS через MFMessageComposeViewController. Если это так, то Apple использует SMS-сервер, который отправляет сообщения от имени устройств, не имеющих сотового модема.

    iOS 6 Обновление

    Нет изменений в этом классе.

    iOS 7 Обновление

    Теперь вы можете проверить, будет ли используемый вами носитель сообщений принимать тему или вложения, а также какие вложения. Вы можете редактировать тему и добавлять вложения в сообщение, где это позволяет носитель.

    iOS 8 Обновление

    Нет изменений в этом классе.

    iOS 9 Обновление

    Нет изменений в этом классе.

    iOS 10 Обновление

    Нет изменений в этом классе.

    iOS 11 Update

    Нет существенных изменений в этом классе

    Ограничения для этого класса

    Имейте в виду, что это не будет работать на телефонах без iOS 4, и это не будет работать на iPod touch или iPad, кроме, возможно, под iOS 5. Вы должны либо обнаружить ограничения устройства и iOS перед использованием этого контроллера, либо рискнуть ограничить свое приложение недавно обновленными 3G, 3GS и 4 iPhone.

    Однако промежуточный сервер, который отправляет SMS, позволяет всем этим устройствам iOS отправлять SMS, если у них есть доступ к Интернету, поэтому это может быть лучшим решением для многих приложений. В качестве альтернативы используйте оба, и используйте сервис SMS только в том случае, если устройство не поддерживает его.

    ответ дан Adam Davis, с репутацией 67218, 12.09.2008
  • 0 рейтинг

    // вызов метода с именем и номером.

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

    }

    // Способ отправки сообщения

    - (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];
     }
    }
    
    ответ дан ALOK KUMAR, с репутацией 715, 10.03.2015
  • 0 рейтинг

    Одной из систем межпроцессного взаимодействия в MacOS является XPC. Этот системный уровень был разработан для межпроцессного взаимодействия на основе передачи структур plist с использованием libSystem и launchd. Фактически это интерфейс, позволяющий управлять процессами посредством обмена такими структурами, как словари. Из-за наследственности iOS 5 также обладает этим механизмом.

    Возможно, вы уже поняли, что я имею в виду под этим введением. Да, в iOS есть системные сервисы, которые включают инструменты для связи с XPC. И я хочу привести в пример работу с демоном для отправки смс. Однако следует отметить, что эта возможность исправлена ​​в iOS 6, но имеет отношение к iOS 5. 0-5. 1. 1. Джейлбрейк, Private Framework и другие нелегальные инструменты не требуются для его эксплуатации. Необходим только набор заголовочных файлов из каталога / usr / include / xpc / *.

    Одним из элементов отправки SMS в iOS является системный сервис com. яблоко. chatkit, в задачи которого входит генерация, управление и отправка коротких текстовых сообщений. Для удобства управления он имеет общедоступный порт связи com. яблоко. chatkit. clientcomposeserver. XPC. Используя подсистему XPC, вы можете создавать и отправлять сообщения без согласия пользователя.

    Хорошо, давайте попробуем создать соединение.

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

    Теперь у нас в XPC-соединении myConnection установлена ​​служба отправки SMS. Однако конфигурация XPC предусматривает создание приостановленных соединений - нам нужно сделать еще один шаг для активации.

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

    Соединение активировано. В этот момент iOS 6 отобразит в телефонном журнале сообщение о том, что этот тип связи запрещен. Теперь нам нужно создать словарь, похожий на xpc_dictionary, с данными, необходимыми для отправки сообщения.

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

    Осталось немного: отправьте сообщение на порт XPC и убедитесь, что оно доставлено.

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

    Вот и все. СМС отправлено.

    ответ дан isox, с репутацией 469, 25.10.2012
  • 0 рейтинг
    1. Вы должны добавить MessageUI. рамки для вашего проекта XCode
    2. Включите #import в заголовочный файл
    3. Добавьте этих делегатов в свой заголовочный файл MFMessageComposeViewControllerDelegate & amp; UINavigationControllerDelegate
    4. В вашем методе IBAction объявите экземпляр MFMessageComposeViewController скажем messageInstance
    5. Чтобы проверить, может ли ваше устройство отправлять текст, используйте [MFMessageComposeViewController canSendText] в условии if, оно вернет Да / Нет
    6. В состоянии if выполните следующие действия:

      1. Первый набор тела для вашего messageInstance как:

        messageInstance.body = @"Hello from Shah";
        
      2. Затем определите получателей сообщения как:

        messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321",         nil];
        
      3. Установите делегата на ваше сообщение, например:

        messageInstance.messageComposeDelegate = self;
        
      4. В последней строке сделайте это:

        [self presentModalViewController:messageInstance animated:YES];
        
    ответ дан Najeebullah Shah, с репутацией 3419, 7.12.2011
  • 0 рейтинг

    Вы можете представить MFMessageComposeViewController, который может отправлять SMS, но с приглашением пользователя (он нажимает кнопку отправки). Нет способа сделать это без разрешения пользователя. На iOS 11 вы можете сделать расширение, которое может быть как фильтр для входящих сообщений, сообщая iOS либо о спаме, либо нет. С SMS ничего больше не поделаешь

    ответ дан Максуд Даудов, с репутацией 490, 26.11.2017
  • 0 рейтинг

    Если вы хотите, вы можете использовать частную платформу CoreTelephony, которая называется CTMessageCenter класс. Есть несколько способов отправить смс.

    ответ дан new soul, с репутацией 259, 29.01.2010
  • 0 рейтинг

    В iOS 4 есть класс, который поддерживает отправку сообщений с телом и получателями из вашего приложения. Это работает так же, как отправка почты. Вы можете найти документацию здесь: текст ссылки

    ответ дан Pankaj Kainthla, с репутацией 1265, 10.09.2010
  • 0 рейтинг
    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]] 
    

    Это был бы лучший и короткий способ сделать это.

    ответ дан Rinku Sadhwani, с репутацией 86, 4.08.2014
  • 0 рейтинг

    Вы можете использовать этот подход:

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


    iOS автоматически перейдет от вашего приложения к странице создания сообщений приложения сообщений. Поскольку схема URL начинается с sms:, это определяется как тип, который распознается приложением сообщений и запускает его.

    ответ дан Dinesh Reddy Chennuru, с репутацией 446, 26.02.2014
  • 0 рейтинг

    Добавьте MessageUI. Framework и используйте следующий код

    #import  
    

    А затем:

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

    и метод делегата -

    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller
                 didFinishWithResult:(MessageComposeResult)result {
          [self dismissViewControllerAnimated:YES completion:nil];
     }
    
    ответ дан Bharat Gulati, с репутацией 730, 10.05.2013
  • 0 рейтинг

    Выполните следующие процедуры

    1. Добавить MessageUI.Framework к проекту enter image description here

    2. Импорт #import в. ч файл.

    3. Скопируйте этот код для отправки сообщения

     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. Реализуйте метод delegate, если хотите.

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

    Беги и Иди!

    ответ дан Tunvir Rahman Tusher, с репутацией 3833, 29.07.2014
  • 0 рейтинг
    //Add the Framework in .h file
    
    #import 
    #import 
    
    //Set the delegate methods
    
    UIViewController
    
    //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]; 
    }
    
    ответ дан Rushabh, с репутацией 3310, 27.08.2012