Things take time

[SWIFT] SMS 문자 메시지 보내기 본문

iOS (기능)

[SWIFT] SMS 문자 메시지 보내기

겸손할 겸 2018. 5. 23. 15:49

[문자 보내기]


iOS의 경우에는 안드로이드처럼 위험 권한으로 분류하여 해당 작업에 대한 권한 요청 및 result를 처리하지 않고 문자 메시지를 보낼 수 있다.


단, 전송까지 하는 것이 아니라 전송 전의 화면까지를 보여줄 수 있다. 해당 번호는 String 배열 이므로, 다중 사용자에게 보내기에도 편리할 것이다.


공식 문서 : https://developer.apple.com/documentation/messageui/mfmessagecomposeviewcontroller

해당 문서에 따르면 message 뷰 컨트롤러도 커스터마이징을 할 수 있다고 한다(UIAppearance 프로토콜을 이용하여)


[코드]

import UIKit import MessageUI class ViewController: UIViewController,MFMessageComposeViewControllerDelegate { override func viewDidLoad() { super.viewDidLoad() } @IBAction func btnClicked(_ sender: UIButton) { let messageComposer = MFMessageComposeViewController() messageComposer.messageComposeDelegate = self if MFMessageComposeViewController.canSendText(){ messageComposer.recipients = ["01012345678"] messageComposer.body = "text message" self.present(messageComposer, animated: true, completion: nil) } } func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { switch result { case MessageComposeResult.sent: print("전송 완료") break case MessageComposeResult.cancelled: print("취소") break case MessageComposeResult.failed: print("전송 실패") break } controller.dismiss(animated: true, completion: nil) } }

MessageUI를 import하고 Delegate 프로토콜을 얻는다.


그리고 필요할 때에만 클래스 변수를 사용하고, delegate를 할당한다.(중요)

만약 messageComposer를 클래스 전역 변수로 사용하게 되면, messageComposeViewController의 finish에서 제대로 dismiss가 되지 않아, 다시 버튼을 눌러도 제대로 메시지 뷰 컨트롤러가 열리지 않는 현상이 발생한다.



[결과]