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
現在地から始まる物語:位置情報アプリ開発の冒険
Search
riataso
April 29, 2025
Programming
1
55
現在地から始まる物語:位置情報アプリ開発の冒険
riataso
April 29, 2025
Tweet
Share
More Decks by riataso
See All by riataso
SwiftUIのアニメーション_ちょっと触ってみた話
riataso_kebin
0
17
Other Decks in Programming
See All in Programming
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
550
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
190
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
580
PHPで TLSのプロトコルを実装してみる
higaki_program
0
480
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
340
Strategy for Finding a Problem for OSS: With Real Examples
kibitan
0
110
AI 開発合宿を通して得た学び
niftycorp
PRO
0
170
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
210
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
190
Feature Toggle は捨てやすく使おう
gennei
0
360
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
180
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
160
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Abbi's Birthday
coloredviolet
2
5.8k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
440
Amusing Abliteration
ianozsvald
0
140
Code Review Best Practice
trishagee
74
20k
Mind Mapping
helmedeiros
PRO
1
130
Speed Design
sergeychernyshev
33
1.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Mobile First: as difficult as doing things right
swwweet
225
10k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
330
Transcript
現在地から始まる物語:位置情報アプリ開発の冒険 2025/04/26(土) Nagoya.swift #1
自己紹介 riataso ・入社3年目のクラウドエンジニア(23年入社) @riataso_kebin ・リモートはじめてから1年で体重10kg増え ました
目次 ・位置情報を使ったアプリの種類 ・位置情報とは ・iOSアプリで位置情報取得する方法と実装例 ・パフォーマンスとバッテリー消費の最適化
みなさんは位置情報を 使ったアプリを普段利用していますか?
位置情報を使ったアプリはたくさん存在します。 ・歩きながらできるゲーム ・配送アプリ ・地図、ナビゲーションアプリ ・天気アプリ ・SNS
位置情報を使ったアプリを作る中で学んだ、 基本的な概念から実践的な活用方法までご紹介します。
位置情報とは 位置情報の基本は「緯度(Latitude)」と「経度(Longitude)」という2つの数値 地球上のどこにいても、この2つの数値があれば位置を特定できる。 名古屋市市政資料館の場合 (愛知県名古屋市東区白壁1丁目3番地) 画像はGoogle Mapsから (35.1812666,136.9103417)
CLLocationManagerクラスを利用することで取得することができる。 iOSアプリで位置情報を取得する方法 CLLocationManagerとは iOS、macOS、watchOSなどのAppleプラットフォームでロケーションサービスを管理す るための中心的なクラスです。 このクラスを使用して、位置情報関連の機能を設定、開始、停止することができます。 引用: https://developer.apple.com/documentation/corelocation/cllocationmanager
・ユーザーの現在位置の追跡 ・コンパスによる方角情報の提供 ・地理的な領域の監視 (ユーザーが特定の領域に入った・出たときのイベント生成) ・Bluetoothビーコンとの距離測定 CLLocationManagerでできること
・ユーザーの現在位置の追跡 ・コンパスによる方角情報の提供 ・地理的な領域の監視 (ユーザーが特定の領域に入った・出たときのイベント生成) ・Bluetoothビーコンとの距離測定 CLLocationManagerでできること 身近でよく使われている、ユーザーの現在位置の追跡に関して実装例を紹介します。
CLLocationManagerの導入例 ・importでCoreLocationを追加します。 ・NSObjectを継承・CLLocationManagerDelegateプロトコルを採用した Classを作成する。 ・CLLocationManagerのインスタンスを作成する。 ・locationManager.delegateの設定 ・(位置情報の使用許可リクエスト) ・(位置情報の取得開始)
位置が変わった・エラーが起きたなどのイベントが発生したときに、その通知を 受け取る「受け取り役」を設定するプロパティです。 CLLocationManager.delegateとは CLLocation.delegateを設定するとどうなるか?
・位置情報が更新された場合 (例)最新の位置情報をもとにマップを更新する。 ・位置情報の取得に失敗した場合 (例)ユーザーにエラーで取得できなかったことを通知 ・位置情報サービスの認証状態が変わった場合 (例)認証が不足している場合、ユーザーに再度有効化してもらう通知 delegateを設定すると以下のようなメソッドが呼ばれるようになります。 ※デリゲートメソッドは自分で実装する必要があります。
位置情報の使用許可について 位置情報は個人情報となるため、アプリは位置情報サービスへのアクセスを使 用する際にユーザーから明示的な許可が必要 ユーザーへの許諾申請画面
・info.plistにキーの追加・位置情報を使用する理由をValueに記載します 位置情報の使用許可設定 Location When In Use Usage Description・・・アプリがフォアグラウンドの時のみ位置情報を使用する場合 Location Always
and When In Use Usage Description・・・アプリがバックグランドでも位置情報を使用する場合
位置情報アプリを利用している時に バッテリー消費が早いと感じたことありませんか?
位置情報を使ったアプリでは、用途に合う取得設定を設定していない場合、過剰なバッテ リー消費や不十分な位置精度によりユーザー体験が損なわれます。 アプリの目的に最適化された設定を選択することが重要になります。 ユーザー体験が損なわれる要因 ・位置情報の取得頻度 ・位置情報の取得精度 ・位置情報の取得方法
CLLocationManagerでは、distanceFilterを設定することで頻度を調整できる。 位置情報の取得頻度 distanceFilterとは 位置の更新が生成されるためにデバイスが移動しなければならない最小距離 (メートル) ※デフォルトは0のため設定していない場合、常に位置の更新が生成される
位置情報の取得精度 desiredAccuracyを設定していない場合 CLLocationManagerではdesiredAccuracyを設定することで精度を調整できる。 ※kCLLocationAccuracyBestがデフォルトで設定されます
・一度のみ位置情報を取得する ・フォアグラウンドで継続的に位置情報を取得する ・バックグラウンドで継続的に位置情報を取得する 位置情報の取得方法 電力消費量は:フォアグラウンド<バックグラウンド ・バックグラウンドは必要最低限とする ・常に位置情報を更新しつづけるのでは状況に応じて停止する
用途にあった取得精度・頻度・方法を調整することで、 バッテリーの消費量を抑えることができ、より安定したサービスを提供できる。
・iOSアプリで位置情報を取得する際にはCLLocationManagerを使って取得することが できる ・位置情報のアプリを作成する際には適切な取得設定をすることが大切 まとめ