Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Navigation x Deep Link 結構大変だった話
Search
KKusumi
November 27, 2019
Programming
440
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Navigation x Deep Link 結構大変だった話
KKusumi
November 27, 2019
More Decks by KKusumi
See All by KKusumi
今日から始めるAndroid Unit Test
kkusumi
0
160
Other Decks in Programming
See All in Programming
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
160
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
320
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
380
Claspは野良GASの夢をみるか
takter00
0
180
Swiftのレキシカルスコープ管理
kntkymt
0
220
Vite+ Unified Toolchain for the Web
naokihaba
0
230
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.9k
スマートグラスで並列バイブコーディング
hyshu
0
120
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
320
ふつうのFeature Flag実践入門
irof
7
3.7k
A2UI という光を覗いてみる
satohjohn
1
120
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
550
RailsConf 2023
tenderlove
30
1.5k
For a Future-Friendly Web
brad_frost
183
10k
Producing Creativity
orderedlist
PRO
348
40k
Automating Front-end Workflow
addyosmani
1370
210k
Chasing Engaging Ingredients in Design
codingconduct
0
220
The Curious Case for Waylosing
cassininazir
1
380
A Soul's Torment
seathinner
6
2.9k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
600
Paper Plane
katiecoart
PRO
1
51k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Transcript
Katsumi Kusumi @ and factory.inc 1 Navigation x DeepLink ݁ߏେมͩͬͨ
About Me 2 • Katsumi Kusumi(@kl_tech) • and factory •
Android App Engineer • ອըΞϓϦ࡞ͬͯ·͢ɻ
3 ࢲ͝ͱͰ͕͢ɺɺɺ
4 ͔͜͜Βຊ
ࠓ͔Β׆͔ͤΔ Jetpack Navigation࣮ํ๏ 5
What is Jetpack Navigation?? 6
Navigationͱ 7 By Android developers documentation • φϏήʔγϣϯͱɺϢʔβʔ͕ΞϓϦͷ༷ʑͳίϯςϯπؒΛҠಈ͢Δૢ࡞ Λࢦ͠·͢ɻ •
Android JetpackͷNavigationίϯϙʔωϯτɺ୯७ͳϘλϯΫϦοΫ͔Βɺ ΞϓϦόʔφϏήʔγϣϯυϩϫʔͳͲͷෳࡶͳύλʔϯ·Ͱɺ͞·͟·ͳφ ϏήʔγϣϯΛ࣮͢Δͷʹཱͪ·͢ɻ • ·ͨɺNavigationίϯϙʔωϯτɺ֬͞Εͨݪଇͷηοτʹै͏͜ͱʹΑ ΓɺҰ؏ੑͷ͋Δ༧ଌ͍͢͠ϢʔβʔΤΫεϖϦΤϯεΛอূ͠·͢ɻ
ʁʁʁ 8
NavigationΛೖΕΔϝϦοτ 9 • ϑϥάϝϯτભҠͷτϥϯβΫγϣϯཧΛͯ͘͠ΕΔ • όοΫϘλϯͷ੍ޚΛͯ͘͠ΕΔ • ը໘ભҠ࣌ͷඪ४ΞχϝʔγϣϯΛఏڙ͍ͯ͠Δ • Deep
LinkΛ؆୯ʹ࣮Ͱ͖Δ • ࠷খݶͷՃ࡞ۀͰɺφϏήʔγϣϯυϩϫʔϘτϜφϏήʔγϣ ϯΛ࣮Ͱ͖Δ • Fragmentؒͷͷड͚͕͠؆୯…ɻͳͲͳͲɻ
NavigationΛೖΕΔϝϦοτ 10 • ϑϥάϝϯτભҠͷτϥϯβΫγϣϯཧΛͯ͘͠ΕΔ • όοΫϘλϯͷ੍ޚΛͯ͘͠ΕΔ • ը໘ભҠ࣌ͷඪ४ΞχϝʔγϣϯΛఏڙ͍ͯ͠Δ • Deep
LinkΛ؆୯ʹ࣮Ͱ͖Δ • ࠷খݶͷՃ࡞ۀͰɺφϏήʔγϣϯυϩϫʔϘτϜφϏήʔγϣ ϯΛ࣮Ͱ͖Δ • Fragmentؒͷͷड͚͕͠؆୯…ɻͳͲͳͲɻ
Navigationͷ Deep Link࣮ํ๏ 11
Navigationͷߏཁૉ 12 NavigationGraph 1. →શͯͷφϏήʔγϣϯؔ࿈ใΛҰͭͷॴͰूதతʹอ͢ΔxmlϦιʔεɻ NavHost 2. →φϏήʔγϣϯάϥϑ͔ΒͷѼઌΛදࣔ͢Δۭͷίϯςφɻ NavController 3.
→NavHostͷΞϓϦφϏήʔγϣϯΛཧ͢ΔΦϒδΣΫτɻ
Navigationͷߏཁૉ 13 NavigationGraph 1. →શͯͷφϏήʔγϣϯؔ࿈ใΛҰͭͷॴͰूதతʹอ͢ΔxmlϦιʔεɻ NavHost 2. →φϏήʔγϣϯάϥϑ͔ΒͷѼઌΛදࣔ͢Δۭͷίϯςφɻ NavController 3.
→NavHostͷΞϓϦφϏήʔγϣϯΛཧ͢ΔΦϒδΣΫτɻ
NavigationGraph 14 <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation" app:startDestination="@id/fragment_sample">
<fragment android:id="@+id/fragment_sample" android:name="SampleFragment" android:label="fragment_samplea"> <action android:id="@+id/action_sampleA_to_sampleB" app:destination=“@id/fragment_sampleb” /> <argument android:name="arg" app:argType="integer" /> <deepLink app:uri="https://www.google.com?arg={arg}"/> </fragment> </navigation>
NavigationGraph 15 <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation" app:startDestination="@id/fragment_sample">
<fragment android:id="@+id/fragment_sample" android:name="SampleFragment" android:label="fragment_samplea"> <action android:id="@+id/action_sampleA_to_sampleB" app:destination=“@id/fragment_sampleb” /> <argument android:name="arg" app:argType="integer" /> <deepLink app:uri="https://www.google.com?arg={arg}"/> </fragment> </navigation>
NavigationGraph 16 <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation" app:startDestination="@id/fragment_sample">
<fragment android:id="@+id/fragment_sample" android:name="SampleFragment" android:label="fragment_samplea"> <action android:id="@+id/action_sampleA_to_sampleB" app:destination=“@id/fragment_sampleb” /> <argument android:name="arg" app:argType="integer" /> <deepLink app:uri="https://www.google.com?arg={arg}"/> </fragment> </navigation> • Navigation Graphͷఆٛ • ͜ͷதʹ༻͢ΔࢠNavigationGraph FragmentΛՃ͍ͯ͘͠ɻ • startDestinationɿ͜ͷNavigationGraph ʹೖͬͨ࣌ʹॳΊͯදࣔ͢ΔFragment
NavigationGraph 17 <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation" app:startDestination="@id/fragment_sample">
<fragment android:id="@+id/fragment_sample" android:name="SampleFragment" android:label="fragment_samplea"> <action android:id="@+id/action_sampleA_to_sampleB" app:destination="@id/fragment_sampleb" /> <argument android:name="arg" app:argType="integer" /> <deepLink app:uri="https://www.google.com?arg={arg}"/> </fragment> </navigation> • Fragmentͷఆٛ • ͜ͷதʹ༻͢ΔҾɺઃఆ͢Δ Deep LinkͷURLΛهࡌ͢Δɻ
NavigationGraph 18 <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation" app:startDestination="@id/fragment_sample">
<fragment android:id="@+id/fragment_sample" android:name="SampleFragment" android:label="fragment_samplea"> <action android:id="@+id/action_sampleA_to_sampleB" app:destination=“@id/fragment_sampleb" /> <argument android:name="arg" app:argType="integer" /> <deepLink app:uri="https://www.google.com?arg={arg}"/> </fragment> </navigation> • ը໘ભҠͷఆٛ • ݱࡏͷFragment͔ΒͲͷFragmentʹભ Ҡ͢Δ͔͕ॻ͔Ε͍ͯΔɻ • ࠓͩͬͨΒSampleA͔ΒSampleB
NavigationGraph 19 <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation" app:startDestination="@id/fragment_sample">
<fragment android:id="@+id/fragment_sample" android:name="SampleFragment" android:label="fragment_samplea"> <action android:id="@+id/action_sampleA_to_sampleB" app:destination="@id/fragment_sampleb" /> <argument android:name="arg" app:argType="integer" /> <deepLink app:uri="https://www.google.com?arg={arg}"/> </fragment> </navigation> • FragmentͷҾ • Deep Linkͷύϥϝʔλ໊ͱҰக͍ͯ͠ Δඞཁ͕͋Δɻ
NavigationGraph 20 <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation" app:startDestination="@id/fragment_sample">
<fragment android:id="@+id/fragment_sample" android:name="SampleFragment" android:label="fragment_samplea"> <action android:id="@+id/action_sampleA_to_sampleB" app:destination="@id/fragment_sampleb" /> <argument android:name="arg" app:argType="integer" /> <deepLink app:uri="https://www.google.com?arg={arg}"/> </fragment> </navigation> • Deep LinkͷURL • ͜Εઃఆ͢ΔͱɺϦϯΫ౿Μͩ࣌ʹભҠ Ͱ͖ΔΑ͏ʹͳΔɻ
21 ͳΜͩʂʂͬͺ؆୯͡ΌΜʂʂ
ͪΐͬͱͯɻ
όοΫελοΫ ͬͯͲ͏ͳͬͯΜͷʁʁ
ͷόοΫελοΫ NavigationGraphͷߏʹґଘ͍ͯ͠Δ Navigation x Deep Link
25 NavigationGraphX
26 NavigationGraphX FragmentA
27 NavigationGraphX FragmentA NavigationGraphY
28 NavigationGraphX FragmentA NavigationGraphY FragmentB FragmentC
29 NavigationGraphX FragmentA FragmentB FragmentC ͜ͷߏͩͱɺόοΫϘλϯΛԡͨ͠߹ଈΞϓϦऴྃʂ
30 NavigationGraphX FragmentA NavigationGraphY FragmentB FragmentC
31 ͜Εʹͯղܾʂʂ
ͪΐͬͱͯɻ
33 NavigationGraphX FragmentA NavigationGraphY FragmentB FragmentC Ͱ͖Δɻ
34 NavigationGraphX FragmentA NavigationGraphY FragmentB FragmentC Ͱ͖ͳ͍ʂʂ
35 NavigationGraphX FragmentA NavigationGraphY FragmentB FragmentC Deep Linkͬͨ࣌ͷͨΊʹ ֊ߏʹ͠ͳ͍ͱ͍͚ͳ͍ɻ ҧ͏֊ͷFragmentʹ
ભҠͰ͖ͳ͍ ࠈɻ
ແཧ͡ΌΜɻ
37 NavigationGraphX FragmentA NavigationGraphY FragmentB FragmentC Ͱ͖Δʂ ղܾࡦ
ղܾࡦ • Ұ֊ԼͷNavigationʹͳΒભҠͰ͖Δɻ ભҠ͍ͨ͠FragmentΛNavigationͷstartDestinationʹઃఆ͢Δ ҾNavigationʹઃఆ͢Δɻ • startDestinationʹઃఆͨ͠FragmentҎ֎ʹભҠ͍ͨ͠߹ startDestinationʹઃఆͨ͠FragmentͷonCreate()Ͱ ϑϥάΛνΣοΫͯ͠ભҠͤ͞Δɻ →
→
·ͱΊ 39 • NavigationͰDeep LinkΛ࣮͢Δͱ͖ɺ֊ߏΛҙࣝ͢Δɻ →Deep LinkͰભҠͨ࣌͠ʹੵΜͰ͓͍ͯ΄͍͠όοΫελοΫ௨Γʹ࡞Δ • ֊͕ҧ͏FragmentʹભҠͰ͖ͳ͍ɻ →NavigationΛҰճט·ͤͯɺstartDestinationͰભҠ͢Δɻ
• ϥϯλΠϜΤϥʔͰ͔͠ෆ۩߹ΛݕͰ͖ͳ͍ͷͰɺͪΐͬͱଟΊʹςετ ͢Δɻ • ͋ͱ͔Βमਖ਼͢ΔͱେมͳͷͰɺͳΔ͘࠷ॳ͔Β֊Λ࡞͓ͬͯ͘ɻ
͓ΘΓɻ 40