이번에는 다른 앱을 호출하고, 파라미터를 넘겨주는 방법을 함께 알아볼 것이다.

간단하게 사용자의 id와 pw를 입력받고, 이 중 id를 다른 앱에 넘겨주는 예제를 진행해보려한다.

 

1. 다른 앱 호출 할 준비하기 (AppA)

  • AppA의 info.plist에 아래 항목을 추가해주어야 'AppB'라는 앱을 호출할 수 있는 권한을 얻는다.

LSApplicationQueriesSchemes의 하위항목을 추가하는 방법을 몰라서 헤맸었는데, 오른쪽 타입을 'Array' 로 해주면 하위 항목을 입력할 수 있다.

 

  • 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 {
	/*처리하는 부분은 내일해야지!!*/
}

 

 

 

 

+ Recent posts