애플리케이션 간 데이터 공동 작업, URL Scheme(사내 학습회용) 정보

5203 단어 MoffURLschemeiOS

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을 설정합니다.
  • moffurlschemesample1://
  • moffurlschemesample2://
  • 개발 프로그램마다 디렉터리


    다음은 각 응용 프로그램의 개발 디렉터리를 결정하고 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,transfer
    query에서 userHeight=170
    기다린다

    구속


    URL Scheme의 제약 조건으로 다음과 같은 제한이 있습니다.
  • 사과
  • 프로젝트 이름의 중복
  • 어플리케이션 설치
  • 따라서 설치 없이 상점으로 안내하려면 처음에 쓴 유니버설 링크를 사용하는 것이 좋다.

    체험 시간


    회사 내에서 아래 링크된 혈압계와 신체조직계를 이용하여 응용 프로그램 간의 데이터 협업을 체험했다.

    최후


    이 기사를 쓴 날, 회사 내 엔지니어의 상황
    iOS 앱과 유니티의 iOS 플러그인 등을 개발했지만, 대부분 앱이 유니티에서 개발돼 iOS 전문 엔지니어가 없어 업데이트된 iOS의 편의 기능을 학습회 등에서 포착하는 경우도 있었다.
    이에 따라 모프는 보건 관련 제품과 서비스를 개발할 엔지니어를 모집하고 있다.

    좋은 웹페이지 즐겨찾기