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
選挙速報を多くのユーザーへ 届ける Live Activities 設計
Search
kengo saito
September 11, 2026
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
選挙速報を多くのユーザーへ 届ける Live Activities 設計
日経電子版アプリでの Live Activities 活用事例と設計ポイントを紹介しています
kengo saito
September 11, 2026
Other Decks in Programming
See All in Programming
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
150
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2k
自分的「カンファレンスの楽しみ方」
syumai
0
200
Family mrubyの進捗
kishima
1
110
Heart of Swift Concurrency
koher
0
290
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
iOSDC2026登壇資料.pdf
riofujimon
0
120
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
780
Foundry Localでエージェント開発
seosoft
0
180
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
470
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
400
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Code Reviewing Like a Champion
maltzj
528
40k
Faster Mobile Websites
deanohume
310
32k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Designing for humans not robots
tammielis
254
26k
30 Presentation Tips
portentint
PRO
1
390
Optimizing for Happiness
mojombo
378
71k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
520
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
How STYLIGHT went responsive
nonsquared
100
6.3k
Transcript
選挙速報を多くのユーザーへ 届ける Live Activities 設計 iOSDC Japan 2026 / ⽇本経済新聞社
齋藤健悟
⽇経電⼦版アプリにて Live Activities による 選挙開票速報を実施 @2025年参院選, 2026年衆院選 ロック画面 Dynamic Island
Apple Watch 2
従来の⽇経電⼦版アプリの選挙対応 @2024年以前 ⽇経電⼦版アプリではWebの 選挙特設ページを表⽰していた ユーザーはアプリを開けば最新情報が取得できる 3
アプリ独⾃の対応は Push 通知がメインだった Push 通知で速報をお知らせ → 選挙情勢に合わせて速報を出したい → 通知が多いと許諾率も下がる もっとアプリの体験を⾼められないか?
4
WWDC24 で Live Activities の Update - iOS 18 で
Broadcast 配信に対応 - ⼤規模配信向けに機能が強化された! - watchOS 11 でも Live Activities の UI が表⽰できるようになった これは選挙開票速報で活⽤できそう! https://developer.apple.com/jp/videos/play/wwdc2024/10069/ https://developer.apple.com/videos/play/wwdc2024/10068/ 5
2024年衆院選で社内検証を実施 実際の選挙データと繋いで体験を確認 情報が⾃動更新される ⾃然と⽬に⼊るUXを確認できた! → 次の選挙に向けて準備を⾏っていた 6
Apple News でも Live Activities が利⽤されていた 2024年⽶国⼤統領 選挙開票速報が で利⽤された 選挙でも
Live Activities を 使う流れを確信! https://apps.apple.com/us/app/apple-news/id1066498020 7 https://www.macrumors.com/2024/11/05/apple-news-us-election-results-iphone/
開票速報を実現する際に重要な要件 素早く 正確に 情報を届ける 8
要件を達成するための2つの対応 ⼤規模配信への対応 負荷を抑えながら素早く更新 ⻑時間表⽰への対応 安定して更新を続け、正確性を担保 開発と検証を重ね、 ⼤規模‧⻑時間の配信に適した実装を確⽴ 9
本発表のスコープ Live Activities 選挙開票速報に特化した事例を紹介 1. ⼤規模配信への対応 a. 通知サーバーの運⽤負荷 b. 更新時のアクセス集中
2. ⻑時間表⽰への対応 a. 8時間の更新停⽌に対応 b. ⾮表⽰に対応 全般の理解は WWDC26 “ライブアクティビティの基本” をご覧ください https://developer.apple.com/jp/videos/play/wwdc2026/223/ 10
1. ⼤規模配信への対応 個別配信 / ⼤規模配信の 2つの利⽤例から⾒ていきましょう 11
Live Activities の利⽤例 Google Mapsでは到着予想時刻を表⽰ Apple Sports ではスポーツ結果を表⽰ 端末ごとの個別の情報を表⽰ ⼤規模に同じ情報を表⽰
Google Maps(Google Inc.) https://apps.apple.com/jp/app/google-%E3%83%9E %E3%83%83%E3%83%97/id585027354 Apple Sports(Apple Inc.) https://apps.apple.com/jp/app/apple-sports/id6446 788829 12
個別配信と⼤規模配信の違い 更新データ (スポーツ情報 ) 更新データ (ナビ情報) 端末ごとに任意のタイミングで送信 iPhone iPhone iPhone
Live Activity 多数の端末へ同時に送信 選挙開票速報はこちら! https://apps.apple.com/jp/app/google-%E3%83%9E%E3%83%83%E3%83%97/id585027354 13 https://apps.apple.com/jp/app/apple-sports/id6446788829
Token を利⽤した更新 - 事前の登録 iOS 16.1 + で利⽤可能 Apple APNs
① Live Activity 更新⽤の Token を取得 通知サーバー ② Token を送信、保存 Live Activity 14
Token を利⽤した更新 - 情報の送信 - Apple APNs ③ Token と
Payload を送信 ④ Payload を受信 表⽰を更新 Live Activity 通知サーバー 個別配信が実現しやすい 15
Token 利⽤の更新を⼤規模配信で利⽤する 通知サーバーから、 Apple APNs 多数の端末に向けて送信する 端末の Token の管理、 送信スケジューラの仕組みの考慮
が必要となる 通知サーバー Live Activity 16
“Broadcast 配信” 17
同じ情報を Broadcast 配信で⼤規模に送信 iOS 18から利⽤が可能になった Token の代わりに APNs で Channel
を⽤意する 18
同じ情報を Broadcast 配信で⼤規模に送信 通知サーバー APNs Channel 購読 iPhone iPhone iPhone
iPhone App 端末は⼀つの Channel を購読する 19
同じ情報を Broadcast 配信で⼤規模に送信 APNs Channel 通知サーバー Payload 購読 iPhone iPhone
iPhone iPhone App サーバーは Channel に対して更新データを⼀度送信する 端末ごとの Token 管理と、送信スケジューラの考慮が不要に! 20
更新⽅式の⽐較 Token 利⽤の更新 Broadcast 配信 対応 iOS iOS 16.1+ iOS
18.0+ 配信先 Live Activity ごとの Token 共通 Channel ID 通知サーバー からの送信数 端末数に⽐例 1回で多数の端末へ 最適な使い⽅ 個別配信 ⼤規模配信 選挙開票速報では Broadcast 配信を利⽤した 21
選挙開票速報のデータモデル 静的な情報 タイトル表⽰ 過半数表⽰ 動的な情報 議席数 記事タイトル, URL 22
選挙開票速報のデータモデル 静的な情報 ActivityAttributes で定義 Live Activity 初期化時に渡す 動的な情報 ContentState で定義
更新時に渡す 変更される情報のみを送信し効率的に View を更新する Payload は 4 KB が上限、動的な情報を最低限に抑える 23
配信時はアプリから API を呼ばずに View を更新 - Broadcast 配信で、APNs から Payload
を受信 - Payload の ContentState で View を再描画 → 更新ごとのAPIリクエストが不要になり、アクセス集中を回避 24
選挙対応での Live Activities の開始と配信 Live Activities を表⽰開始 Broadcast 配信 アプリ起動時に
Live Activity 1. 更新を実施 開始⽤のデータを取得 2. ⾮表⽰にも対応 アプリ向け API iPhone App 通知サーバー APNs Channel iPhone iPhone iPhone iPhone App 25
開始処理 アプリ起動 / フォアグラウンド時に開始情報を取得 得られた開始情報で Live Activity を開始 ⚠ Broadcast
配信で開始することはできない 26
⾮表⽰処理 Broadcast 配信で Live Activity を即時⾮表⽰にできる Payload に下記を設定 - event:
“end” - dismissal-date: 1 - 現在時刻より過去に設定する 27
更新の制約: バジェット管理 - 更新にはバジェットがあり、超過すると更新が遅延 - 更新 priority: high を使⽤すると即時反映ができるが、 バジェットが消費される
- Info.plist で ”より頻繁なアップデート” 設定をすることで バジェットを増やせる - “NSSupportsLiveActivitiesFrequentUpdates” 28
Live Activities は UI に許可ダイアログが表⽰される Live Activities 表⽰の許可 初回のタイミングで表⽰ “より頻繁なアップデート”
設定の許可 検証では1~2時間後に表⽰された どちらも、アプリインストール時は許可状態となっている 29
2. ⻑時間表⽰への対応 30
Live Activities は⻑時間利⽤に制約がある Live Activities を⾮表⽰にする4パターン 1. Broadcast 配信 2.
アプリ / AppIntent から 3. ユーザー操作 a. 通知と同様に横スワイプで消せる 4. システムが時間経過で⾮表⽰にする 31
Live Activities の時間制約 1. 表⽰から8時間後に、更新ができなくなる 2. 表⽰から12時間後に、⾮表⽰となる → 4時間の間は、更新されないままロック画⾯に表⽰が残る 表⽰開始
12時間後 ⾮表⽰ 8時間後 更新可能 更新不可 32
2026年衆議院選挙の投開票⽇ 当⽇のスケジュール - 投開票⽇ 2/8 20:00 - 開票が始まる - Live
Activities 表⽰を開始 - 翌⽇ 2/9 9:30ごろ - 開票が終了したことを確認 - Live Activities 表⽰を終了 33
開票速報は⼀晩かかるコンテンツ 8時間経過で更新が停⽌する場合 開票途中の Live Activity がそのまま残ってしまう → 不正確な情報のまま残る、速報性も失われてしまう 34
Live Activity を再⽣成しよう 8時間経過 ボタン押下 時間経過でボタンを表⽰ 再⽣成して 更新ができるように! 35
Live Activity を再⽣成しよう 再⽣成の選択肢 1. Live Activity タップ時にアプリを起動し、再⽣成 2. Live
Activity 上のボタン押下で、再⽣成 36
再読み込みボタンの表⽰判定 表⽰開始 開始時刻を 静的データで保持 Broadcast 配信 View 更新 表⽰開始から 8時間経過?
再読み込みボタン表⽰ Yes No 配信データで更新 37
再⽣成処理の実装 1. 再⽣成の AppIntent を Button に設定 a. Live Activities
は WidgetExtension で動くので AppIntent で処理を実⾏ b. LiveActivityIntent を使⽤ i. バックグラウンドでも、Live Activity を開始することができる 2. AppIntent 処理 a. 表⽰中の Live Activity を⾮表⽰ b. Live Activity を新規に⽣成 38
Live Activities の再⽣成によってできたこと - 不正確な情報が残らないように - ユーザーが必要なタイミングで、最新の情報が取得できるように 39
“Live Activities が消せない‧‧‧” スワイプで消せるOSの仕様だが、初⾒ではわかりづらい ロック画⾯、Dynamic Island に ⼀晩中表⽰され続ける 消したいユーザーにも配慮したい! 40
閉じるボタンを設置 - AppIntent で表⽰中の Live Activity を⾮表⽰ - アプリ起動時に再表⽰されないように、 同じ
Live Activity は表⽰しない 誰でも直感的に⾮表⽰にできるようになった! 41
選挙開票速報 Live Activity のライフサイクル 20時 開票開始 アプリ起動時 Live Activity 開始
⾼頻度に データ更新 Broadcast 配信 8時間経過時 ユーザー操作で 再生成 翌朝9時30分ごろ 議席が確定 Broadcast 配信 非表示 42
選挙開票速報 Live Activities 設計ポイント ⼤規模配信への対応 Broadcast 配信を活⽤し、Token の管理を不要に → 通知送信サーバーの運⽤コストを削減
表⽰に必要な情報を最⼩限の Payload に集約 → 更新のたびに API リクエストを⾏わず、アクセス集中を回避 ⻑時間表⽰への対応 AppIntent による再⽣成、削除の仕組みを⽤意 → 必要なユーザーが最新表⽰を継続的に取得できる 43
Live Activities の広がるタッチポイント - iPhone - ロック画⾯ - Dynamic Island
- Standby - Apple Watch - Smart Stack (watchOS 11) - CarPlay - ダッシュボード (iOS 26) - Mac (iPhone Mirroring) - メニューバー (macOS 26) 44
皆さんのプロダクトにも Live Activities を取り⼊れてみてください! 45
NIKKEI Tech Talk #50 信頼されるニュース体験を⽀える技術 〜iOS27 新機能活⽤とAndroid 継続的 改善の取り組み〜 46