Отправить SMS в iOS

Я новичок в iOS разработке и xCode. Раньше я разрабатывал Android и знаю, что должен работать с Intent, чтобы звонить и отправлять SMS в приложении для Android. Теперь я хочу разработать простое приложение, которое при нажатии Button отправляет SMS на определенный номер. Итак, я установил Mac OS 10.11 VM на свой Ubuntu. И могу подключить к нему мой iPhone 5 и запустить мое простое приложение Hello World на реальном iPhone устройстве, а не simulator. Теперь я создал Button в StoryBoard и выполняю функции, следуя этой статье: Отправить SMS-сообщение Toturial

Также посмотрите другие ссылки и было похоже. Вот мой простой ViewController.swift.

import UIKit
import MessageUI

class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func sendMessage(sender: AnyObject) {

        print("Send button pressed") //display a text to make sure is calling

        if MFMessageComposeViewController.canSendText() {
            let controller = MFMessageComposeViewController()
            controller.body = "TestMessage "
            controller.recipients = ["xxxxxxxxx", "xxxxxxxxx"] // sending for two numbers
            controller.messageComposeDelegate = self
            self.presentViewController(controller, animated: true, completion: nil)
        }
    }
    func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) {

        switch (result.rawValue) {
        case MessageComposeResultCancelled.rawValue:
            print("Message was cancelled")
            self.dismissViewControllerAnimated(true, completion: nil)

        case MessageComposeResultFailed.rawValue:
            print("Message failed")
            self.dismissViewControllerAnimated(true, completion: nil)

        case MessageComposeResultSent.rawValue:
            print("Message was sent")
            self.dismissViewControllerAnimated(true, completion: nil)

        default:
            break;
        }
    }

}

А также создал кнопку Simple и свяжите ее с sendMessage выше. Когда я запускаю приложение, отображается кнопка, а когда я ее нажимаю, кажется, что оно что-то делает, но SMS не отправляется. Любая идея?? Я очень ценю это.

Обновление: как сказал наш друг, я добавил print("Send button pressed") в sendMessage Button, поэтому я узнаю, что кнопка вызывает sendMessage, когда я ее нажимаю.


person Alireza    schedule 24.07.2016    source источник
comment
Можете ли вы поместить print("Send button pressed") в свою sendMessage функцию? Если вы не видите это сообщение в консоли, функция, вероятно, не вызывается.   -  person kabiroberai    schedule 24.07.2016
comment
Я добавил эту строку до и после, если в функции SendMessage, где должна быть эта печать? Я не вижу в области отладки или на экране iphone, что мне теперь делать?   -  person Alireza    schedule 24.07.2016
comment
Вы подключили кнопку из раскадровки к коду?   -  person kabiroberai    schedule 24.07.2016
comment
Да, я сделал, я нажал кнопку управления, а затем щелкнул кнопку и перетащил ее в ViewController, и теперь он подключен к функции sendMessage.   -  person Alireza    schedule 24.07.2016
comment
Что вы имеете в виду, говоря, что он что-то делает?   -  person kabiroberai    schedule 24.07.2016
comment
извините, сэр, теперь я вижу журнал, он отображает текст, который я вставил в функцию sendMessage, я имею в виду, что этот метод работает: print (кнопка отправки нажата)   -  person Alireza    schedule 24.07.2016
comment
Можете ли вы обновить свой вопрос, указав заявление о печати, которое я дал?   -  person kabiroberai    schedule 24.07.2016
comment
Я сделал это, и когда я нажал кнопку, я увидел текст в консоли вывода xCode.   -  person Alireza    schedule 24.07.2016
comment
Я имею в виду, можете ли вы поместить код в вопрос выше? Чтобы я мог видеть, где вы его разместили.   -  person kabiroberai    schedule 24.07.2016
comment
@kabiroberai я сделал, сэр   -  person Alireza    schedule 24.07.2016
comment
Что произойдет, если вы поместите оператор print в блок if?   -  person kabiroberai    schedule 24.07.2016
comment
@kabiroberai В области отладки и в части «Все выходные данные» отображается текст (кнопка «Отправить» нажата), когда я нажимаю кнопку.   -  person Alireza    schedule 24.07.2016
comment
поместите print внутрь if (MFMessageComposeViewController.canSendText()) {...}   -  person kabiroberai    schedule 24.07.2016
comment
Вы имеете в виду, что он это делает, даже когда находится внутри?   -  person kabiroberai    schedule 24.07.2016
comment
Что вы видите, когда нажимаете кнопку?   -  person kabiroberai    schedule 24.07.2016
comment
@kabiroberai: я не очищал первую печать до if и теперь помещаю печать после оператора if, теперь отображается дважды, текст отображается дважды.   -  person Alireza    schedule 24.07.2016
comment
Да, это событие. Событие зовет.   -  person Alireza    schedule 24.07.2016
comment
Что вы видите на экране своего iPhone?   -  person kabiroberai    schedule 24.07.2016
comment
На экране кажется, что кнопка опускается и снова выходит на первое место.   -  person Alireza    schedule 24.07.2016
comment
@kabiroberai Понятия не имею?   -  person Alireza    schedule 24.07.2016
comment
Я делаю перекрестные ссылки на учебник, чтобы проверить, что отличается в вашем коде   -  person kabiroberai    schedule 24.07.2016
comment
@kabiroberai Еще кое-что было! точно после контроллера: MFMessageComposeViewController в messageComposeViewController в этом тотализаторе xCode выдает предупреждение об удалении! Теперь добавил! снова и не позаботился о предупреждении xCode, но все равно безуспешно. И я также даю номер полностью. без - или _ или что-нибудь еще. Код моей страны и номер мобильного телефона.   -  person Alireza    schedule 24.07.2016
comment
@kabiroberai: У ссылки была проблема, я ее редактирую.   -  person Alireza    schedule 24.07.2016


Ответы (2)


Я, наконец, сделал это, я перепутал два решения. Прежде всего, я изменил функцию sendMessage и переименовал ее в sendText, таким образом:

    @IBAction func sendText(sender: AnyObject) {
    if (MFMessageComposeViewController.canSendText()) {
        let controller = MFMessageComposeViewController()
        controller.body = "Text Body"
        controller.recipients = ["xxxxxxxxxxx"]
        controller.messageComposeDelegate = self
        self.presentViewController(controller, animated: true, completion: nil)
    }
}

И протокол MessageComposeViewController:

func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) {
    switch (result.rawValue) {
    case MessageComposeResultCancelled.rawValue:
        print("Message was cancelled")
        self.dismissViewControllerAnimated(true, completion: nil)
    case MessageComposeResultFailed.rawValue:
        print("Message failed")
        self.dismissViewControllerAnimated(true, completion: nil)
    case MessageComposeResultSent.rawValue:
        print("Message was sent")
        self.dismissViewControllerAnimated(true, completion: nil)
    default:
        break;
    }
}

Затем нажмите кнопку в раскадровке, нажмите клавишу control, перетащите кнопку в ViewController и выберите функцию sendText, теперь она работает правильно.

Спасибо моему другу @Kabiroberai за помощь и уделил немного времени.

person Alireza    schedule 25.07.2016

Вот нижняя функция, преобразованная в swift 4:

func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
    switch (result.rawValue) {
    case MessageComposeResult.cancelled.rawValue:
        print("Message was cancelled")
        self.dismiss(animated: true, completion: nil)
    case MessageComposeResult.failed.rawValue:
        print("Message failed")
        self.dismiss(animated: true, completion: nil)
    case MessageComposeResult.sent.rawValue:
        print("Message was sent")
        self.dismiss(animated: true, completion: nil)
    default:
        break;
    }
}
person Rick Harrison    schedule 28.08.2017