boraBong

[iOS] Swift를 사용하여 iOS 디바이스에서 전화를 거는 방법 📞 (URLScheme) 본문

iOS/Feat

[iOS] Swift를 사용하여 iOS 디바이스에서 전화를 거는 방법 📞 (URLScheme)

보라봉_ 2021. 2. 9. 01:23
728x90

안녕하세요ㅎㅅㅎ 

보라봉입니다💜

 

오늘은 swift를 사용하여 iOS 디바이스에서 전화를 거는 기능을 공부해 볼 거에요!!

 

 

📚 알아야 할 기능

- URLScheme

 

1️⃣ URLScheme

iOS에서는 URLScheme을 사용해서 URL을 통해 다른 앱과 연결할 수 있어요.

 

< URLScheme을 사용하는 과정 >

1. 먼저 URLScheme 문자열을 통해 URL 인스턴스를 만들어 줍니다.

2. 그 다음 canOpenURL(_:) 메소드를 통해서 URL 체계를 처리하는 데 앱을 사용할 수 있는지 여부를 확인합니다.

3. 만약 사용가능한 URLScheme이라면 open(_:options:completionHandler:) 메소드를 호출해서 다른 앱을 열게 됩니다.

 

func canOpenURL(_ url: URL) -> Bool

https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl

 

Apple Developer Documentation

 

developer.apple.com

func open(_ url: URL, 
  options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:], 
completionHandler completion: ((Bool) -> Void)? = nil)

https://developer.apple.com/documentation/uikit/uiapplication/1648685-open

 

Apple Developer Documentation

 

developer.apple.com

 

iOS는 기본으로 설치된 내장 앱인 전화, 메시지, 메일, 지도 앱 등과 통신할 수 있는 내장 URLScheme을 제공해요!

따라서 우리는 내장 전화앱과 연결을 시도할 거기 때문에 

"tel:전화번호" 와 같은 형식으로 내장 전화 앱과 URL연결을 해줄거에요 !!

 

내장 URLScheme

tel:전화번호 전화 앱 연결
mailto:메일주소 메일 앱 연결
sms:전화번호 메시지 앱 연결
http://사이트URL
https://사이트URL
웹사이트로 연결
facetime://FaceTime ID FaceTime으로 연결
facetime-audio://FaceTime ID FaceTime Audio로 연결
http://maps.apple.com/?q=검색어
http://maps.apple.com/?ll=위도,경도
지도앱 연결 후 지역 표시
itms://itunes.apple.com/us/app/app-store/앱 ID 앱스토어 앱을 통해 앱 정보 표시

 

 

 

 


 

 본격적으로 시작하기 전에 !

iOS에서 전화를 걸기 위해서는 주의해야 할 사항이 있어요

 

XCode 시뮬레이터에서는 실행되지 않습니다. 반드시 iOS디바이스와 연결해서 테스트해주세요!


 

📞 iOS 디바이스에서 전화 걸기

클릭 이벤트 시 전화를 걸도록

버튼 IBAction 내에 전화 행동을 정의해주었습니다.

@IBAction func touchUpForCalling(_ sender: UIButton) {
        let number:Int = 1011111111
        
        // URLScheme 문자열을 통해 URL 인스턴스를 만들어 줍니다.
        if let url = NSURL(string: "tel://0" + "\(number)"),
        
           //canOpenURL(_:) 메소드를 통해서 URL 체계를 처리하는 데 앱을 사용할 수 있는지 여부를 확인
           UIApplication.shared.canOpenURL(url as URL) {
           
           //사용가능한 URLScheme이라면 open(_:options:completionHandler:) 메소드를 호출해서 
           //만들어둔 URL 인스턴스를 열어줍니다.
            UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
        }
    }

 

✅ if let url = NSURL(string: "tel://0" + "\(number)"), 

tel:전화번호 형식은 iOS 기본 내장 URLScheme입니다.

따라서 전화를 걸기 위해 URL 형식을 "tel:01011111111"와 같은 형식으로 정의해주었습니다.

 


 

 

📞 iOS 디바이스에서 전화 걸고 앱으로 다시 돌아왔을 때 화면 전환시키기

 

NotificationCenter가 감시해서
화면전환을 시켜 줄 함수를 만들어줍니다.

함수의 이름은 didEnterBackground()로 설정해주었습니다!

전화앱이 연결되어서 백그라운드모드로 진입하였을 때 화면전환을 시켜주는 원리입니다 :)

 //앱 background시 호출
    @objc func didEnterBackground() {
        print("didEnterBackgroud")
        
        let AfterCallingVC = self.storyboard?.instantiateViewController(identifier: "AfterCallingVC") as! AfterCallingVC
        self.modalPresentationStyle = .fullScreen
        self.present(AfterCallingVC, animated: true, completion: nil)
    }

 

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
       
    }

 

 

 

<전체 코드>

//
//  ViewController.swift
//  iPhoneCall
//
//  Created by 황지은 on 2020/12/27.
//

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
        
    }
    
    
    override func viewDidDisappear(_ animated: Bool) {
        NotificationCenter.default.removeObserver(self)
    }
    
    
    @IBAction func touchUpForCalling(_ sender: UIButton) {
        let number:Int = 01011111111
        if let url = NSURL(string: "tel://0" + "\(number)"),
           UIApplication.shared.canOpenURL(url as URL) {
            UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
        }
    }
    
    
    // 앱 background시 호출
    @objc func didEnterBackground() {
        print("didEnterBackgroud")
        
        let AfterCallingVC = self.storyboard?.instantiateViewController(identifier: "AfterCallingVC") as! AfterCallingVC
        self.modalPresentationStyle = .fullScreen
        self.present(AfterCallingVC, animated: true, completion: nil)
    }
    
}

https://github.com/hwangJi-dev/iOS-Practice/tree/master/iPhoneCall

 

hwangJi-dev/iOS-Practice

지은 iOS 기록장🍎. Contribute to hwangJi-dev/iOS-Practice development by creating an account on GitHub.

github.com

 

 

오늘은 이렇게 아이폰에서 전화걸기 기능에 대해서 공부를 해봤습니다 :)

여러분들께 유익한 정보가 되었으면 좋겠네요 ㅎㅎ💜

도움이 되셨다면 공감 눌러주세용!ㅎㅎ

 

반응형
Comments