이번에는 다른 앱을 호출하고, 파라미터를 넘겨주는 방법을 함께 알아볼 것이다.
간단하게 사용자의 id와 pw를 입력받고, 이 중 id를 다른 앱에 넘겨주는 예제를 진행해보려한다.
1. 다른 앱 호출 할 준비하기 (AppA)
-
AppA의 info.plist에 아래 항목을 추가해주어야 'AppB'라는 앱을 호출할 수 있는 권한을 얻는다.
- Info.plist에 이를 추가해주지 않으면 아래와 같은 에러가 발생한다.
2. 다른 앱에서 호출받을 준비 하기 (AppB)
-
AppB의 URL Type에 본인의 앱 스킴이 무엇인지 정의해야, 다른 앱에서 해당 스킴으로 호출할 수 있다.
-
아래와 같이 Project > Info > URL Types 에 번들id 와 url Schemes를 정해준다.
3. 다른 앱 호출하기 (AppA)
-
AppB:// 와 같이 다른 앱에서 정의해 놓은 url Schemes로 url을 생성한다.
이 때 파라미터를 넣고 싶은 경우에는 AppB://id=hello 와 같은 타입으로 url을 정의한다.
-
그 다음 canOpenUrl 을 이용해 해당 앱을 실행시킬 수 있는지 확인하고,
가능할 경우 open(url: , options: , completionHandler: ) 메서드를 이용해 앱을 호출한다.
( 기존에는 openURL(string: ) 메서드가 존재했으나, deprecate되었다. )
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
/*처리하는 부분은 내일해야지!!*/
}
@IBAction func login(_ sender: Any) {
var id = userID.text ?? ""
let urlString = "AppB://" + "id=" + id
if let appUrl = URL(string: urlString){
if(UIApplication.shared.canOpenURL(appUrl)){
UIApplication.shared.open(appUrl, options: [:], completionHandler: nil)
}else{
let showAlert = UIAlertController(title: "안내", message: "앱이 설치되어있지 않습니다.", preferredStyle: UIAlertController.Style.alert)
}
}
}
4. 호출될 때 넘겨받은 파라미터 처리하기 (AppB)
-
Url scheme을 이용해 앱이 호출되면 AppDelegate의 application(_:open:options:) 메서드가 호출된다. 파라미터를 처리해주기 위해 해당 메서드를 재정의한다.
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
/*처리하는 부분은 내일해야지!!*/
}
'iOS > iOS 앱개발' 카테고리의 다른 글
[swift] 웹통신하기 - 1. node.js를 이용한 간단한 웹서버 구축 (0) | 2019.12.01 |
---|---|
[swift] 웹통신하기 - 0. 네트워크 기본 지식 (0) | 2019.12.01 |
[iOS] 객체 간 통신 - Notification (0) | 2019.11.24 |
[Swift] 앱에서 다른 앱 호출하기 (0) | 2019.11.18 |
[Objective-C] delay 주기 (0) | 2019.11.16 |