ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift/Study] 번호 추가해서 문자메시지 보내기
    Study/ios 2023. 7. 5. 15:28

    이번에는 MessageUI 프레임 워크를 활용하여 문자 메시지를 보내보려고 한다.

    MessageUI는 아이폰내에 있는 문자메시지 앱과 이메일 앱을 활용하여 문자나 이메일을 보낼 수 있도록 인터페이스를 제공한다.

    Messages라는 프레임 워크도 있는데 MessageUI와는 다른 프레임 워크다.

    Messages는 문자메시지앱과 상호작용하는 앱을 개발하기 위해 필요한 프레임워크고

    MessageUI는 단순히 인터페이스를 제공한다고 생각하면 된다.

     

    어쨌든 나는 MessageUI를 활용하여 문자메시지를 보내보겠다. (이메일x)

     

     

    간단하게 뷰에 버튼 하나를 추가하고 액션 함수를 정의해준다.

     

    @IBAction func onSend(_ sender: Any) {
    
    }

     

     

    MessageUI를 임포트 해주고 MFMessageComposeViewControllerDelegate를 채택해준다.

    import UIKit
    import MessageUI
    
    class ViewController: UIViewController, MFMessageComposeViewControllerDelegate

     

     

    그리고 버튼 액션함수에 다음과 같이 코드를 추가한다.

    @IBAction func onSend(_ sender: Any) {
        // 메시지 작성 가능한지 확인
        if MFMessageComposeViewController.canSendText() {
            let messageVC = MFMessageComposeViewController()
    
            // 메시지 내용 할당
            messageVC.body = "test"
    
            var phones: [String] = []
    
            // 보내려는 사람의 전화번호 추가
            phones.append("01012345678")
            phones.append("01012345566")
    
            // phones 배열을 messageVC의 recipients 속성에 할당하여 수신자 번호 설정
            messageVC.recipients = phones
    
            messageVC.messageComposeDelegate = self
    
            // MFMessageComposeViewController를 모달로 표시하여 메시지 작성 화면을 보여줌
            present(messageVC, animated: true, completion: nil)
        } else {
            print("메시지 전송 실패")
        }
    }

    설명은 주석처리 해놨는데 canSendText()를 통해 메시지 작성이 가능한지 확인한다고 되어있다.

    위 함수가 true를 반환해야 메시지를 보낼 수 있다고 판단하는데 그 경우는 일반적으로 3가지 경우이다.

     

    1. 기기가 전화기능과 문자 메시지 기능을 지원하는 경우.
    2. 기기에 SIM 카드가 있으며, 전화 통신 서비스에 가입된 경우.
    3. 기기가 연결된 데이터 네트워크(모바일 데이터 또는 Wi-Fi)를 통해 텍스트 메시지를 보낼 수 있는 경우.

     

    보낼 메시지와 받을 사용자 번호를 추가하고 present로 메시지 창을 모달로 띄운다.

    그러면 아래와 같은 화면을 확인할 수 있다.

    받는 사람과 텍스트가 자동으로 추가된 모습.

    전송만 누르면 바로 전송이 가능하다.

     

     

    추가로 위 화면에서 사용자의 동작에 따라 추가적인 작업을 하게할 수 있다.

    // 메시지 작성이 완료되었을 때의 처리
    func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
        switch result {
        case .cancelled: // 메시지 전송 취소
            print("Message cancelled")
        case .sent: // 메시지 전송 성공
            print("Message sent")
        case .failed: // 메시지 전송 실패
            print("Message sending failed")
        @unknown default:
            break
        }
        // 메시지 작성화면 종료
        controller.dismiss(animated: true, completion: nil)
    }

    사용자가 메시지 전송을 취소했을 때, 메시지 전송에 성공했을 때, 외부적인 요소로 메시지 전송을 실패했을 때

    원하는 작업을 추가해줄 수 있다.

Designed by Tistory.