본문 바로가기

iOS

[iOS] MFMessageComposeViewController 사용해서 SMS 보내기

728x90

앱에서 사용자에게 SMS를 보낼 때, 메세지 내용과 함께 보내는 기능을 개발중이다.

openURL~ 로 SMS를 보낼 수 있지만, 이 방법으로는 메세지 내용을 담아 보낼 수는 없는 듯 하다.

그래서 MFMessageComposeViewController를 사용해 SMS를 전송하도록 구현했다.

붙이는 곳 코드가 Objective-C.. 라서 옵씨로.. 코드를 추가했지만,

추후에 리팩토링하면서 필요하니까 Swift로도 정리해놓겠땅

 

1. MessageUI Framework 추가하기

project > target에 MessageUI Framework을 추가해준다.

 

2. 사용하는 곳에서 Framework import 해주기

objective-C 에서는 <~.h> 헤더 추가, swift에서는 Framework import 해준다.

 

3. 코드 추가!

recipients : SMS 수신자 번호 정보(리스트에 여러개 담을 수 있음)

body : SMS 내용 컨텐츠

MFMessageComposeViewController * smsVC = [[MFMessageComposeViewController alloc] init];
    
if([MFMessageComposeViewController canSendText]) {
        // SMS 수신자(여러명 가능)
        smsVC.recipients = [NSArray arrayWithObjects:phoneNumber, nil];
        // SMS 내용
        smsVC.body = message;
        
        // SMS 전송 후 처리가 필요할 때 사용(ex. 전송 완료 메세지 등)
        smsVC.messageComposeDelegate = self;
        
        // present!
        [self presentViewController:smsVC animated:true completion:nil];
        
    }
        let smsVC = MFMessageComposeViewController()
        
        smsVC.recipients = ["010어쩌구번호"]
        smsVC.body = "SMS 내용내용"
        
        smsVC.delegate = self
        
        self.present(smsVC, animated: true)

이렇게 원하는 정보를 담아서 전송까지 테스트 해볼 수 있는데, 

전송 완료되거나 취소했을 때 멈춘다.

뷰에서 작업이 완료된 후의 처리를 앱에서 해주기 위해서 delegate 셋팅 해주고, 아래 method로 처리해줄 수 있다.

 

- (void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
    
    switch (result) {
        case MessageComposeResultCancelled:
            NSLog(@"문자 전송이 취소되었습니다.");
            break;
            
        case MessageComposeResultFailed:
            NSLog(@"문자 전송 실패!");
            break;
            
        case MessageComposeResultSent:
            NSLog(@"문자 전송이 완료되었습니다.");
            break;
            
        default:
            break;
            
    }
    [controller dismissViewControllerAnimated:true completion:nil];
    
}
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
        
        switch result {
            
        case .cancelled:
            print("문자 전송이 취소되었습니다.")
            break
        case .sent:
            print("문자 전송이 완료되었습니다.")
            break
        case .failed:
            print("문자 전송 실패!")
            break
        @unknown default:
            break
        }
        
        controller.dismiss(animated: true)
    }

 

728x90