🔥

[SwiftUI]Deep Linkで値を受け取り画面を出し分けする

2021/06/10に公開

SwiftUIでDeep Linkで起動されたURLを取得する方法についてまとめました。

Deep Linkとは

アプリを起動して特定のコンテンツへ直接遷移できる技術です。
https://dev.startialab.blog/etc/a45

方法としては以下の2つがあります。

  • Custom URL Scheme:(非推奨) custom-scheme://のように、スキームがアプリ独自のものです
  • Universal Links:(推奨) https://example.com/some/pageのように、HTTPのスキームでアプリを起動できます。

設定方法については割愛します。

SwiftUIで受け取り

View.onOpenURLを使用します。

次のように、メインのContentViewに対し、onOpenURLを追加します。

@main
struct CustomSchemeSampleApp: App {
    
    @State var index: Int = 0
    
    var body: some Scene {
        WindowGroup {
            if self.index == 0 {
                ContentView()
                    .onOpenURL(perform: { url in
                        debugPrint(url)
                        self.index = 1
                    })
            } else {
                SecondView()
            }
        }
    }
}

Safari等のブラウザで、custom-scheme://と検索窓に打ち込んで開くと、アプリが起動します。
この例では、indexによってViewを切り替えています。URLの内容はパースしていません。
custom-scheme://で起動→ContentViewを起動→onOpenURLでViewを切り替え→SecondViewを表示、の順になっています。

サンプルコード

https://github.com/usk-sample/CustomSchemeSample

参考

https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app
https://blog.personal-factory.com/2020/11/30/how-to-create-deep-link-for-widget/

Discussion