Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
アプリへの導線の増やし方.pdf
Search
PKPK-Carnage
December 24, 2019
Programming
760
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アプリへの導線の増やし方.pdf
PKPK-Carnage
December 24, 2019
More Decks by PKPK-Carnage
See All by PKPK-Carnage
iOSアプリを堅牢にデザインするために知っておくべきたった1つのこと
pkpkcarnage
0
520
「シェア機能」について考えてみた
pkpkcarnage
0
120
リリースビルドでのみ起こる謎のバグに見舞われた話
pkpkcarnage
0
230
Any型をprotocolにキャストする時に 気をつけた方がいい話
pkpkcarnage
0
310
今日から使える! Optionalをいい感じに扱うtips
pkpkcarnage
0
1.3k
もっと早く教えて欲しかった画面遷移
pkpkcarnage
0
370
iOSの通信処理を簡潔に書く
pkpkcarnage
0
330
Other Decks in Programming
See All in Programming
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
App Intentsのビルドプロセスを支える技術
kntkymt
0
310
XHTMLが残したもの
yosuke_furukawa
PRO
2
710
AHC070解法紹介
eijirou
0
110
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
240
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
150
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
Family mrubyの進捗
kishima
1
110
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
290
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
200
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
110
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
220
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
4k
The Curse of the Amulet
leimatthew05
2
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Thoughts on Productivity
jonyablonski
76
5.4k
The Language of Interfaces
destraynor
162
27k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Statistics for Hackers
jakevdp
799
230k
Automating Front-end Workflow
addyosmani
1369
210k
Six Lessons from altMBA
skipperchong
29
4.5k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
530
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
؆୯ʹͰ͖Δʂ ΞϓϦͷಋઢͷ૿͠ํ Tomosuke Okada 2019/12/24 ͋Δ͋ΔLTʙ ΫϦεϚεͩΑʂAndroid & iOS߹ಉ େLTେձ
ʙ Vol.9 1
About me • Tomosuke Okada • iOSྺ3 • ອըͷΞϓϦΛ࡞ͬͯ·͢ •
SNS • Qiita → @fr0g_fr0g • Github → Frog-Frog • Twitter → @fr0g_fr0g • μϒϧϑϩοά
ΞϓϦ։ൃऀͷئ͍ɾɾɾ 3
ΞϓϦΛͬͯཉ͍͠ʂʂ 4
ಋઢΛ૿͞ͳ͖Όʂ 5
ΞϓϦΛ։ͨ͘Ίͷํ๏ͬͯͳʹ͕͋ΔͩΖ͏ʁ • ϗʔϜ • AppStore • ϓογϡ௨ • URLεΩʔϜ •
ϢχόʔαϧϦϯΫ • TodayExtension • Spotlightݕࡧ 7
SpotlightݕࡧΛհ͍ͨ͠ 8
Spotlightݕࡧͬͯͳʹʁ 9
10
͜͜ʹࣗͷΞϓϦͷίϯςϯπΛද͍ࣔͨ͠ 11
12 CoreSpotlight.frameworkͱMobileCoreServices.frameworkΛՃ͢Δ
13 struct Movie { /// өըݻ༗ͷࣝผ൪߸ let id = 0
/// ໊લ let title = "εύΠμʔϚϯ" /// ͋Β͢͡ let summary = "ฏຌͳগɺϐʔλʔɾύʔΧʔ์ࣹೳԚછ͞Εͨᥨʹט·Εͨ͜ͱͰɺਓతͳ ೳྗΛಘͯ͠·͏ɾɾɾ" /// ը૾ let thumbnail = UIImage(named: "spider") /// ऀ໊ͷྻ let actorNames = ["τϏʔɾϚάϫΠΞ", "ΩϧεςΟϯɾμϯετ", "δΣʔϜζɾϑϥϯί"] }
14 import Foundation import CoreSpotlight import MobileCoreServices final class SpotlightManager
{ func save(_ movie: Movie) { let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeData as String) // ᶃλΠτϧ attributeSet.title = movie.title // ᶄઆ໌จ attributeSet.contentDescription = movie.summary // ᶅը૾ attributeSet.thumbnailData = movie.thumbnail?.pngData() // Ωʔϫʔυʢදࣔ͞Εͳ͍͕ɺλΠτϧઆ໌จʹೖͬͯͳ͍จݴΛ͜͜ʹೖΕ͓͚ͯɺݕࡧͨ࣌͠ʹҾ͔͔ͬΔΑ͏ʹͳΔʣ attributeSet.keywords = movie.actorNames /* uniqueIdentifierAppDelegateͰऔΓग़͢͜ͱ͕Ͱ͖ΔͷͰɺ Spotlightݕࡧܦ༝ͰΞϓϦΛ։͍ͨ࣌ͷͨΊͷURLεΩʔϜΛೖΕ͓ͯ͘ */ let item = CSSearchableItem( uniqueIdentifier: "my-app://open/movie?id=\(movie.id)", domainIdentifier: "my-app", attributeSet: attributeSet ) CSSearchableIndex.default().indexSearchableItems([item], completionHandler: nil) } }
15
16
ͨͬͨ͜Ε͚ͩͷίʔυͰදࣔͰ͖Δʂ 17
18 import CoreSpotlight extension AppDelegate { func application(_ application: UIApplication,
continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { // SpotlightͰ։͔Ε͔ͨͲ͏͔ΛνΣοΫ͢Δ switch userActivity.activityType { case CSSearchableItemActionType: return self.openApplicationFromSpotlight(userActivity) default: return false } } private func openApplicationFromSpotlight(_ userActivity: NSUserActivity) -> Bool { // userActivity͔ΒURLεΩʔϜΛऔಘ͢Δ guard let urlScheme = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String else { return false } // URLεΩʔϜΛ։͍ͨ࣌ͷॲཧΛ࣮͢Δ return true } }
࣮ࡍʹͱ͋ΔΞϓϦͰೖΕͯΈͨ 19
શવΘΕͯͳ͍ 21
ͦΜͳʹ൵؍తʹͳΔ͜ͱͰͳ͍ 22
͜͏ࢥͬͨ 27 • ͦͦͦΜͳʹΘΕΔͱࢥͬͯͳ͍ • ίϯςϯπϏδωε(ອը)ΛߦͬͯΔ • ڝ߹ΞϓϦ͕ͻ͠Ί͖߹ͬͯΔ • Spotlightݕࡧʹ࡞໊Λೖྗ͢ΔϢʔβʔɺྔ͕ߴ͍ͣ
• ͦ͏͍ͬͨϢʔβʔ͕ΞϓϦΛ։͖͔͚ͬ͘Λ࡞Δ͜ͱ͕Ͱ͖Δ
·ͱΊ • Spotlightݕࡧ͔ͳΓ؆୯ʹ࣮Ͱ͖Δ • ͦΜͳʹେྔʹΘΕΔػೳͱ͍͏Θ͚Ͱແ͍ • SpotlightݕࡧʹίϯςϯπΛද͓ࣔͤͯ͘͜͞ͱʹҙຯ͕͋Δ • ࣮ʹؔͯ͠Qiitaʹৄ͘͠ॻ͍ͨ 31
32
Qiitaͱ͍͑ɾɾɾ 33
and factory Advent Calendar 2019 34
35
͓ΘΓ 36