🍎

iOS | Custom URL Scheme で起動したときの URL を取得する方法

2022/06/21に公開

こんにちは。本職は Android ですが、最近 iOS を触り始めた者です。

ライフサイクルを管理する2つのクラス

iOS 13 からライフサイクルを管理するクラスとして SceneDelegate が導入されました(プロジェクト作成時、自動で生成されています)。従来の AppDelegate も引き続き利用できますが、ライフサイクルメソッドが呼ばれるのは AppDelegate か SceneDelegate のどちらか一方のようです。

Custom URL Scheme の URL を取得する

my-app:// などの Custom URL Scheme を使ってアプリを起動するとき、その URL を取得したいことが多々あると思います。SceneDelegate を使用している場合、以下のメソッドで取得できます。

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    ...

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // アプリ未起動からディープリンクで起動した場合、このメソッドが呼ばれる

        if let url = connectionOptions.urlContexts.first?.url {
            print("url \(url)")
        }
    }

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        // アプリ起動中にディープリンクでフォアグランド化した場合、このメソッドが呼ばれる
        
        if let url = URLContexts.first?.url {
            print("url \(url)")
        }
    }
    
    ...
}

ディープリンクで起動したときのデバッグ方法

アプリ未起動からディープリンクで起動したときのデバッグは以下の方法でできました。

https://qiita.com/AlecYawata/items/79f45e85ecc573860dcb

Discussion