애플리케이션 간 데이터 공동 작업, URL Scheme(사내 학습회용) 정보
URL Scheme
iOS의 경우 고유의 Custom URL Scheeme(예: moffapp://)를 적용해 애플리케이션을 식별하고 시작할 수 있습니다.
//이후 URL 섹션에서는 애플리케이션에 정보를 받을 수 있습니다.
앱 시작 전용 URL만 잡으면 될 것 같아서요.
iOS에는 유사한 기능으로 Universal Links가 있습니다.(iOS 9 이후 출시)
URL Scheme과 달리 Universal Links에서는 유일하게 웹 사이트와 애플리케이션을 지정하는 것으로, 앱이 있으면 바로 앱을 열 수 있고, 앱이 없으면 웹 사이트를 열 수 있다.
(참조: https://qiita.com/mono0926/items/2bf651246714f20df626
왜, 이제 와서 URL Scheme인가?
애초 URL Scheme을 사내에서 사용하려고 했던 시기는 2014년으로 거슬러 올라갈 수 있지만,'회사 내 출시된 앱이 늘었다'는 상황에서 앱 간 다양한 과제가 생겼을 때의 해결책 중 하나로 미리 알려드리려 했다.
또 외부 기기와 협업해 데이터를 얻을 때 사용하는 구조이기 때문에 알림이라는 뜻을 담았다.
간단하게 수발하는 샘플 응용
예를 들어 프로그램 1과 프로그램 2가 서로 시작하는 프로그램을 만듭니다.
URL Scheme의 결정
Custom URL Scheme 사용
나는 iOS 응용 프로그램 간에 데이터 협업을 할 수 있는 간단한 견본 응용 프로그램을 만들고 싶다.
먼저 URL 스키마를 개별적으로 결정합니다.
응용 프로그램 1과 응용 프로그램 2는 각각 다음 URL을 설정합니다.
개발 프로그램마다 디렉터리
다음은 각 응용 프로그램의 개발 디렉터리를 결정하고 Xcode로 새로운 응용 프로그램을 만든다.
응용 프로그램DevTest/moffurlschemesample1
응용 프로그램DevTest/moffurlschemesample2
Xcode의 URL Scheme 설정
info.plist에 다음 항목을 추가합니다.
예: 응용 프로그램 1
<array>
<dict>
<key>CFBundleURLName</key>
<string>mobi.moff.moffurlschemesample1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>moffurlschemesample1</string>
</array>
</dict>
</array>
<array>
<string>moffurlschemesample2</string>
</array>
응용 프로그램 2를 moffurlschemesample2
로 변경하십시오.샘플 코드
AppDelegate.swift
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let message = url.host?.removingPercentEncoding
let alertController = UIAlertController(title: "Incoming Message", message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)
alertController.addAction(okAction)
window?.rootViewController?.present(alertController, animated: true, completion: nil)
return true
}
ViewController.swift
에서 다음과 같이 추가, 화면에 버튼 추가, launchApp()를 터치다운과 연결한다. let url:String = "moffurlschemesample1://"
@IBAction func launchApp() {
let alertPrompt = UIAlertController(title: "Open App", message: "You're going to open \(self.url)", preferredStyle: .actionSheet)
let confirmAction = UIAlertAction(title: "Confirm", style: UIAlertActionStyle.default, handler: { (action) -> Void in
if let url = URL(string: self.url) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
})
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil)
alertPrompt.addAction(confirmAction)
alertPrompt.addAction(cancelAction)
present(alertPrompt, animated: true, completion: nil)
}
실행
데이터 송수신
응용 프로그램 1의
ViewController.swift
URL 변경은 다음과 같다. let url:String = "moffurlschemesample2://transfer?userHeight=170"
응용 프로그램 2의 AppDelegate.swift
는 다음과 같이 변경되었다. let arr = url.query!.components(separatedBy:"&")
var data = [String:Any]()
for row in arr {
let pairs = row.components(separatedBy:"=")
data[pairs[0]] = pairs[1]
}
let userHeight = data["userHeight"]
let message = "url : \(url.absoluteString)\n"
+ "scheme : \(url.scheme!)\n"
+ "host : \(url.host!)\n"
+ "query : \(url.query!)\n"
+ "userHeight : \(userHeight!)\n"
host,transferquery에서 userHeight=170
기다린다
구속
URL Scheme의 제약 조건으로 다음과 같은 제한이 있습니다.
등
체험 시간
회사 내에서 아래 링크된 혈압계와 신체조직계를 이용하여 응용 프로그램 간의 데이터 협업을 체험했다.
최후
이 기사를 쓴 날, 회사 내 엔지니어의 상황
iOS 앱과 유니티의 iOS 플러그인 등을 개발했지만, 대부분 앱이 유니티에서 개발돼 iOS 전문 엔지니어가 없어 업데이트된 iOS의 편의 기능을 학습회 등에서 포착하는 경우도 있었다.
이에 따라 모프는 보건 관련 제품과 서비스를 개발할 엔지니어를 모집하고 있다.
Reference
이 문제에 관하여(애플리케이션 간 데이터 공동 작업, URL Scheme(사내 학습회용) 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yonesaka/items/83c0cafbe77e5481cf5b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)