go_routerでサクッとカスタムURLスキームを実装する
はじめに
アプリにおいて特定のURLに対して反応し、アプリに動作させることはよくあるケースです。これを実現するためのリンクをディープリンクといい、そのリンクに独自のURLスキームを利用することをカスタムURLスキームと呼びます。
また、特定のWebページへのリンク(https
で始まるスキーム)に反応してアプリを動作させることもディープリンクと呼び、これを行うための技術として
AndroidではAppLinks、iOSではUniversalLinksがあります。
Flutter公式の説明にはこちらのAppLinksとUniversalLinksを使用する例が載っていますが、カスタムURLスキームについては書かれていませんでした。
ので、今回はFlutterとgo_routerでカスタムURLスキームを実装する方法を紹介します。
今回使用したサンプルコードはこちらです。
環境
対象 | バージョン |
---|---|
Flutter | 3.27.1 |
go_router | 14.6.2 |
go_router_builder | 2.7.1 |
build_runner | 2.4.14 |
build_verify | 3.1.0 |
実装
Android、iOSそれぞれで、schemesample
で発火するカスタムURLスキームを有効化する方法を紹介します。
とはいえ、どちらも数行追加するのみです。
Android
AndroidManifest.xmlにディープリンクを有効化する記述と、有効化するURLスキームの定義を追加します。
iOS
Androidと同じく、info.plistにディープリンクを有効化する記述と、有効化するURLスキームの定義を追加します。
動かしてみる
これによりカスタムURLスキームによりアプリの起動や対象の画面への遷移を行うことができるようになりました。
アプリを起動する
カスタムURLスキームのみを渡した場合はinitialLocation
で指定した最初の画面が開かれます。
URL: schemesample://
特定のルートに遷移する
go_router
で定義した個別のルートへのパスを渡すことで、対象の画面を開くことができます。
URL: schemesample://app/detail/1
存在しないルートに遷移する
未定義のパスへのURLを渡した場合はGoRouter
のerrorBuilder
で定義した画面が表示されます。今回は特に指定していないのでデフォルトのエラー画面が表示されます。
URL: schemesample://app/aaaaaa
まとめ
最近ではセキュリティ上の理由からカスタムURLスキームではなくApplinksやUniversalLinksを使用することが推奨されています。[1][2]
ですがWebサイトの用意やassetlinksファイル等の準備が必要になるため過剰な対応になってしまう場面もあるかと思います。カスタムURLスキームであればサクッと実装することができるため、場合によって使い分けることができると良いかと思います。
Discussion