일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- swift codility
- ac swift 풀이
- swift 연속된 부분 수열의 합 풀이
- ios
- rxswift
- 1 2 3 더하기 풀이
- 연속된 부분 수열의 합 swift
- swift ac
- 123 더하기 풀이
- MVVM
- swift 2xn 타일링
- swift ac 풀이
- swift 프로그래머스
- swift
- swift algorithm
- swift 9095 풀이
- swift ac 문제풀이
- swift 2xn 타일링 백준
- swift 2xn 타일링 풀이
- swift gRPC
- ac 구현 풀이
- ac 투포인터
- swift 알고리즘
- 연속된 부분 수열의 합 투포인터
- swift 백준 9095
- swift dfs
- 백준 2xn 타일링
- 백준 2xn 타일링 풀이
- swift 연속된 부분 수열의 합
- iOS Charts
- Today
- Total
boraBong
[iOS] Swift를 사용하여 iOS 디바이스에서 전화를 거는 방법 📞 (URLScheme) 본문
안녕하세요ㅎㅅㅎ
보라봉입니다💜
오늘은 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
func open(_ url: URL,
options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:],
completionHandler completion: ((Bool) -> Void)? = nil)
https://developer.apple.com/documentation/uikit/uiapplication/1648685-open
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
오늘은 이렇게 아이폰에서 전화걸기 기능에 대해서 공부를 해봤습니다 :)
여러분들께 유익한 정보가 되었으면 좋겠네요 ㅎㅎ💜
도움이 되셨다면 공감 눌러주세용!ㅎㅎ
'iOS > Feat' 카테고리의 다른 글
[iOS] UIScreen Swift에서 디바이스 사이즈 인식하기(UIScreen Size)📱 (0) | 2021.04.10 |
---|---|
[iOS] Swift를 사용하여 카카오톡 앱을 실행하는 방법 📲 (URLScheme) (0) | 2021.04.10 |
[iOS] Charts 라이브러리로 막대그래프 라운드 커스텀하기📊 "How to make Round BarChart in Charts?" (0) | 2021.02.10 |
[iOS] Swift를 이용해서 iOS 디바이스에서 Email 보내기 📧 (5) | 2021.02.08 |
[iOS] Charts 라이브러리로 막대그래프 만들기📊 (7) | 2020.10.18 |