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
アプリへの導線の増やし方.pdf
Search
PKPK-Carnage
December 24, 2019
Programming
750
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
510
「シェア機能」について考えてみた
pkpkcarnage
0
120
リリースビルドでのみ起こる謎のバグに見舞われた話
pkpkcarnage
0
230
Any型をprotocolにキャストする時に 気をつけた方がいい話
pkpkcarnage
0
310
今日から使える! Optionalをいい感じに扱うtips
pkpkcarnage
0
1.3k
もっと早く教えて欲しかった画面遷移
pkpkcarnage
0
370
iOSの通信処理を簡潔に書く
pkpkcarnage
0
320
Other Decks in Programming
See All in Programming
New "Type" system on PicoRuby
pocke
1
790
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
さぁV100、メモリをお食べ・・・
nilpe
0
130
Claspは野良GASの夢をみるか
takter00
0
180
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
480
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
210
The NotImplementedError Problem in Ruby
koic
1
690
Agentic UI
manfredsteyer
PRO
0
130
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
4.9k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
250
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
8
700
Paper Plane
katiecoart
PRO
1
51k
WENDY [Excerpt]
tessaabrams
11
38k
Designing Powerful Visuals for Engaging Learning
tmiket
1
410
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Joys of Absence: A Defence of Solitary Play
codingconduct
1
390
Automating Front-end Workflow
addyosmani
1370
210k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
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