일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- spring
- UIStackView
- Tuist
- widgetkit
- backend
- app intents
- Coding Test
- Apple Developer Academy
- fcm
- Flutter
- watchkit
- coreml
- ios
- Project
- Sendbird
- UITableView
- WWDC22
- Swift
- Firebase
- tabman
- github
- 코테
- task.yield()
- UIDatePicker
- swift concurrency
- Complication
- Delegate Pattern
- SwiftUI
- createml
- cloud functions
- Today
- Total
azhy의 iOS 이야기
[iOS] URL Scheme, 다른 앱 호출하기 (구글맵, 카카오맵) 본문
2022년 9월 17일에 작성됨
종종 앱을 사용하다 보면 다른 앱으로 이동하는 경우가 있습니다. URL Scheme를 이용하면 정말 쉽게 구현이 가능합니다.
구현 방법에 대해 알아보고 끝에 좌표값을 가지고 구글맵과 카카오맵을 띄우면서 그 장소로 이동하는 것을 한번 정리해 보겠습니다.
URL Scheme 란?
URL Scheme란 무엇일까요?
우리가 인터넷에 주소를 입력하면 앞에 붙는 https:// 이 부분이 바로 웹의 스키마입니다. 스키마는 https:// 만 있는 것이 아닙니다.
이 사진은 크롬 설정창의 주소입니다. 맨 앞에 https:// 이 아니라 chrome://라고 적혀있죠? 이 뜻은 '웹사이트가 아닌 chrome에 직접 요청을 보냈다.'라는 뜻입니다.
그럼 앱으로 한번 접근해 보면 대충 상상이 가시나요? 스키마 자리에 URL Scheme를 지원하는 어떤 앱이 들어가면 해당 앱으로 요청을 보내 해당 앱을 실행시키게 됩니다.
웹사이트로 요청 - https://
크롬으로 요청 - chrome://
어떤 앱으로 요청 - myApp://
이런 형태가 되는 것입니다.
URL Scheme 사용하기
Defining a custom URL scheme for your app 문서를 보면 URL Scheme를 사용할 때 주의할 점을 알려주는데
'모든 URL 매개변수의 유효성을 검사하고 잘못된 URL은 모두 삭제해야 합니다. 또한 사용자 데이터를 위험에 빠뜨리지 않는 작업으로 사용 가능한 작업을 제한합니다. URL 처리 코드를 테스트할 때 테스트 케이스에 형식이 잘못된 URL이 포함되어 있는지 확인하십시오.'
한마디로 '사용자 데이터와 같은 민감한 정보를 포함하지 말고 사용이 가능한 URL인지 확인해라' 이렇게 정리할 수 있을 거 같습니다.
자 이제 주의할 점을 알았으니 어떻게 사용하는지 코드로 알아봅시다.
if UIApplication.shared.canOpenURL(url){
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
print("error")
}
끝입니다. 생각보다 너무 간단하죠?
먼저 canOpenURL으로 사용하려는 url이 정상인지 확인을 하고, 사용 가능하면 UIApplication.shared.open을 사용해서 해당 앱으로 연결시킵니다.
좌표값을 사용해서 구글맵, 카카오맵 띄우기
제가 프로젝트에서 진행했던 내용입니다. URL Scheme랑 같이 보면 좋을 거 같아서 정리해보려 합니다.
우선 구글맵부터 한번 볼까요? iOS용 Google 지도 URL 스키마에 모든 것이 적혀있습니다. 친절하게 예제 코드도 있네요.
let url = URL(string: "comgooglemaps://?center=\(latitude),\(longitude)&zoom=17&mapmode=standard")
if UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!){
UIApplication.shared.open(url!, options: [:], completionHandler: nil)
} else {
print("can't use google map")
}
구글맵은 지도를 표시하는 데 있어 필요한 매개변수를 사용해서 다양하게 표시할 수 있습니다.
- center: 지도의 표시 영역 중심점입니다. 쉼표로 구분된 latitude, longitude 문자열 형식으로 지정됩니다.
- mapmode: 표시되는 지도의 종류를 설정합니다. standard 또는 streetview로 설정할 수 있습니다. 지정하지 않으면 현재 애플리케이션 설정이 사용됩니다.
- views: 특정 뷰를 사용 설정하거나 사용 중지합니다. satellite, traffic, transit로 설정할 수 있습니다. 쉼표 구분자를 사용하여 여러 값을 설정할 수 있습니다. 값이 지정되지 않은 매개변수가 있으면 모든 뷰가 지워집니다.
- zoom: 지도의 확대/축소 수준을 지정합니다.
자 구글맵을 봤으니 이제 카카오맵을 한번 보겠습니다. Kakao Maps API 카카오맵도 정리가 아주 잘 되어 있습니다.
let url = URL(string: "kakaomap://look?p=\(latitude),\(longitude)")
if UIApplication.shared.canOpenURL(URL(string:"kakaomap://")!){
UIApplication.shared.open(url!, options: [:], completionHandler: nil)
} else {
print("can't use kakao map")
}
이 코드는 단순히 카카오맵과 구글맵을 띄우고 좌표값으로 이동시키는 코드입니다. 이 기능 말고도 길 찾기, 검색하기, 경로표시 등 다양한 기능들이 있으니 필요하다면 문서를 통해 구현하시면 됩니다!
LSApplicationQueriesSchemes
저 코드를 실행시키면 아마 실행이 안될 겁니다. 아직 한 단계가 더 남았거든요. canOpenURL(_:) 문서를 보면 canOpenURL을 사용하려면 이 메서드에 전달할 URL을 따로 앱 파일에 키를 추가해줘야 합니다.
info.plist 에 이렇게 추가해 주시면 됩니다!
결과화면
'iOS' 카테고리의 다른 글
[iOS] The app references non-public in Payload 경고 (0) | 2024.11.14 |
---|---|
[iOS] please delete it and use the new collections.json instead 경고 해결법 (1) | 2024.11.14 |
[iOS] clipsToBounds / masksToBounds (0) | 2024.11.13 |
[iOS] ScaleToFill / AspectFit / AspectFill (0) | 2024.11.13 |
[iOS] SpriteKit, 눈과 비를 내리는 효과를 만들어보자 (0) | 2024.11.13 |