Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20170130 NotificationContent Extensionを使ってみた
Search
Kei Ito
January 30, 2017
Programming
0
1.4k
20170130 NotificationContent Extensionを使ってみた
関モバ #22の資料です
Kei Ito
January 30, 2017
Tweet
Share
More Decks by Kei Ito
See All by Kei Ito
20211015 Mac CatalystでmacOS用アプリを作る
itok
2
4.4k
20210219 Flutterに入門してみた
itok
1
4k
20201009 iOS 14 ウィジェットをつくってみた
itok
1
2.4k
20191206 Property Wrappers 入門
itok
0
1.6k
20190920 iOS 13 対応ではまった話
itok
1
2.4k
20190726 Background App Refresh Taskがやってきた
itok
0
2.2k
20190722 Firebase Remote Configでアドネットワークを管理する
itok
0
1.5k
20190419 iOSアプリで証明書の情報を参照する
itok
0
1.4k
20190412 Android TV向けアプリを作ってみる
itok
0
1.1k
Other Decks in Programming
See All in Programming
AWS CDKの推しポイントN選
akihisaikeda
1
240
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
210
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
6
2.2k
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.6k
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
240
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
450
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
100
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
2.9k
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
170
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
220
認証・認可の基本を学ぼう後編
kouyuume
0
190
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.2k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
How to train your dragon (web standard)
notwaldorf
97
6.4k
A Tale of Four Properties
chriscoyier
162
23k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Mobile First: as difficult as doing things right
swwweet
225
10k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Producing Creativity
orderedlist
PRO
348
40k
Transcript
/PUJpDBUJPO$POUFOU &YUFOTJPOΛͬͯΈͨ ؔϞόΠϧΞϓϦݚڀձ !JUPL@UXJU
!JUPL@UXJU w ͍ͱ͏͚͍ʢJUPLʣ w ɹɹɹɹɹɹͷதͷਓ w ެࢲڞʹϓϩάϥϚJ04.BDʢͨ·ʹ"OESPJE8JOEPXTʣ w IUUQJUPLKQ IUUQTPSBLB[FDPKQ
/PUJpDBUJPO$POUFOU &YUFOTJPOͱ
දࣔͰ͖Δͷ w ී௨ͷ6*ίϯςϯπͳΒ͍͍ͩͨԿͰ
6*8FC7JFX
.,.BQ7JFX
ͬͯΈΑ͏ 9DPEFJ04 ϦϞʔτ௨
5BSHFUΛՃ
*OGPQMJTUͷฤू
6//PUJpDBUJPO&YUFOTJPO $BUFHPSZ w ඞਢ w ௨ૹ৴ଆͰ͜ΕΛࢦఆ w $BUFHPSZ͕Ұகͨ͠߹ͷΈ&YUFOTJPO͕ىಈ
6//PUJpDBUJPO&YUFOTJPO *OJUJBM$POUFOU4J[F3BUJP w ඞਢ w ௨7JFXͷΞεϖΫτൺॳظ w 7JFXͷαΠζ͋ͱ͔ΒมߋՄೳ w ԣج४
6//PUJpDBUJPO&YUFOTJPO %FGBVMU$POUFOU)JEEFO w Φϓγϣϯ w σϑΥϧτͷ௨༰Λදࣔ͢Δ͔Ͳ͏͔ͷϑϥά w 5JUMFɺ4VC5JUMFɺ#PEZͳͲ w σϑΥϧτɿGBMTF
6//PUJpDBUJPO&YUFOTJPO 0WFSSJEFT%FGBVMU5JUMF w Φϓγϣϯ w ௨7JFXͷ্෦λΠτϧΛ7JFX$POUSPMMFSUJUMFͰ ্ॻ͖͢Δ͔Ͳ͏͔ͷϑϥά w ௨༰ʹ߹ΘͤͨλΠτϧʹ͢Δ͜ͱՄೳ w
σϑΥϧτɿGBMTF
࣮ // දࣔॲཧͷ࣮ମ // self.title͜͜Ͱॻ͖͑ΒΕΔ←OverridesDefaultTitle func didReceive(_ notification: UNNotification) {
} // Actionॲཧͷ࣮ମ func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) { } 6//PUJpDBUJPO$POUFOU&YUFOTJPO
௨ͷૹ৴ \ BQT\ BMFSU\ UJUMF5JUMF TVCUJUMF4VC5JUMF CPEZ#PEZ ^
DBUFHPSZNZ$BUFHPSZ ^ ^
ϝϞ w ௨7JFX্λονΠϕϯτ͕ൃੜ͠ͳ͍ w ϝσΟΞͷ࠶ੜίϯτϩʔϧ͚ͩදࣔ͢ΔͨΊͷ ϓϩύςΟ͕͋Δ w Ϣʔβ͔Βͷૢ࡞Λड͚͚͍ͨ߹ 6//PUJpDBUJPO"DUJPOΛ͏
ϝϞ w /PUJpDBUJPO4FSWJDF&YUFOTJPOͱҧͬͯແࢹͰ͖ ͳ͍ w $BUFHPSZΛΘ͚Δ͜ͱͰෳͷ&YUFOTJPOΛ͍ ͚Δ͜ͱ͕Ͱ͖Δ
ϝϞ w 4FSWJDF&YUFOTJPOͱͷಉډՄೳ NVUBCMFDPOUFOU ແ ༗ DBUFHPSZ ແ 4FSWJDF&YUFOTJPO
༗ $POUFOU&YUFOTJPO 4FSWJDF&YUFOTJPO ˣ $POUFOU&YUFOTJPO
"DUJPOαϯϓϧ \ BQT\ BMFSU\ UJUMFؔϞό TVCUJUMF CPEZ/PUJpDBUJPO$POUFOU&YUFOTJPOΛͬͯΈͨ!JUPL ^
DBUFHPSZ,BONPCB NVUBCMFDPOUFOU JNHVSMYYY VSMIUUQTLBONPCBDPOOQBTTDPNFWFOU ^ ^
"DUJPOαϯϓϧ // ϗετΞϓϦέʔγϣϯଆ let action = UNNotificationAction(identifier: "open", title: "Open",
options: []) let category = UNNotificationCategory(identifier: "Kanmoba", actions: [action], intentIdentifiers: [], options: []) UNUserNotificationCenter.current() .setNotificationCategories([category])
"DUJPOαϯϓϧ // Extensionଆ func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping
(UNNotificationContentExtensionResponseOption) -> Void) { if response.actionIdentifier == "open" { if let url = response.notification.request.content.userInfo["url"] as? String { self.extensionContext?.open(URL(string: url)!, completionHandler: nil) } } completion(.dismiss) } &YUFOTJPOͰॲཧ͞Εͳ͍ʢϝιου͕ఆٛ͞Ε͍ͯͳ͍ʣ߹ ϗετʹ͞ΕΔʢΒ͍͠ʣ
/PUJpDBUJPO$POUFOU &YUFOTJPOΛͬͯ ϦονͳϢʔβମݧΛ