Blog スタッフブログ

Swift システム開発

[Swift]iOS15でカスタムURLスキームを利用する

Swift

こんにちは、株式会社MIXシステム開発担当のBloomです。

早速本題のiOS15でカスタムURLスキームを利用してアプリをURLから起動する手順について、

お仕事の中で得た知見を共有させていただきたいと思います。

カスタムURLスキームの設定

カスタムURLスキームの設定は[Targets] -> [Info] -> [URL types]から行います。

Identifierにはアプリを特定するユニークな文字列を、URL SchemesにはURLでいうプロトコル名に相当する利用したい名称を、Roleにはアプリの種別をEditor、Viewer、Noneから選択してください。

実行結果

これだけでURLからのアプリ起動ができるようになりました。

カスタムURLスキームのパラメータを受け取る

このままURLスキームのパラメータも受け取りましょう。iOS13からは、SceneDelegateによってURLスキームから開かれた場合の動作をキャッチできます。下記コードをSceneDelegateへ追記してください。

    @available(iOS 13.0, *)
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let url = URLContexts.first?.url,
              let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true),
              let text = urlComponents.queryItems?.first(where: { $0.name == "text" })?.value else { return }
        if let vc = self.window?.rootViewController as? ViewController {
            vc.welcomeText = text
        }
    }
    
    @available(iOS 13.0, *)
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
        
        guard let url = connectionOptions.urlContexts.first?.url,
              let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true),
              let text = urlComponents.queryItems?.first(where: { $0.name == "text" })?.value else { return }
        if let vc = self.window?.rootViewController as? ViewController {
            vc.welcomeText = text
        }
    }

ここでは簡単にRootViewControllerに下記記述を行うことで直接値を受け渡していますが、基本的にはNotificationCenterを利用した実装が適切でしょう。

    @IBOutlet weak var welcomeLabel: UILabel?
    var welcomeText: String? {
        didSet {
            welcomeLabel?.text = welcomeText
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        welcomeLabel?.text = welcomeText
    }

実行結果

これでURLスキームに含まれるパラメータの取得も簡単にできました。良かったですね。

参考文献

Defining a Custom URL Scheme for Your App – Apple Developer Documentation