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
NAVITIME JAPAN
PRO
August 26, 2024
Technology
3
440
実践ジオフェンス 効率的に開発するために
2024/08/22-24に開催された「iOSDC Japan 2024」で発表した資料です
https://iosdc.jp/2024/
NAVITIME JAPAN
PRO
August 26, 2024
Tweet
Share
More Decks by NAVITIME JAPAN
See All by NAVITIME JAPAN
つよつよリーダーが 抜けたらどうする? 〜ナビタイムのAgile⽀援組織の変遷〜
navitimejapan
PRO
22
15k
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
170
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
2.5k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
1.4k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
270
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
3.4k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.3k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
7
5.4k
こうしてふりかえりは終わってしまった / A Demise of a retrospective
navitimejapan
PRO
46
29k
Other Decks in Technology
See All in Technology
MIMEと文字コードの闇
hirachan
2
1.4k
データエンジニアリング領域におけるDuckDBのユースケース
chanyou0311
9
2.2k
OSS構成管理ツールCMDBuildを使ったAWSリソース管理の自動化
satorufunai
0
650
AWS Well-Architected Frameworkで学ぶAmazon ECSのセキュリティ対策
umekou
2
150
コンピュータビジョンの社会実装について考えていたらゲームを作っていた話
takmin
1
610
AWSアカウントのセキュリティ自動化、どこまで進める? 最適な設計と実践ポイント
yuobayashi
7
630
1行のコードから社会課題の解決へ: EMの探究、事業・技術・組織を紡ぐ実践知 / EM Conf 2025
9ma3r
11
3.9k
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
180
"TEAM"を導入したら最高のエンジニア"Team"を実現できた / Deploying "TEAM" and Building the Best Engineering "Team"
yuj1osm
1
190
Share my, our lessons from the road to re:Invent
naospon
0
150
Windows の新しい管理者保護モード
murachiakira
0
200
NFV基盤のOpenStack更新 ~9世代バージョンアップへの挑戦~
vtj
0
360
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Making Projects Easy
brettharned
116
6k
Typedesign – Prime Four
hannesfritz
40
2.5k
Unsuck your backbone
ammeep
669
57k
What's in a price? How to price your products and services
michaelherold
244
12k
Producing Creativity
orderedlist
PRO
344
40k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
430
Optimising Largest Contentful Paint
csswizardry
34
3.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.3k
Facilitating Awesome Meetings
lara
52
6.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
10
510
Code Review Best Practice
trishagee
67
18k
Transcript
実践ジオフェンス : 効率的に開発するために iOSDC 2024 LT Naoki Ishii
所属 株式会社ナビタイムジャパン 担当サービス auナビウォーク 担当領域 Android/iPhoneアプリの開発 (Androidのほうが長め) 石井 直貴 自己紹介
@IIInaIII
位置乗降アラーム 駅やバス停に近づくと、アラームでお知らせしてくれる auナビウォーク
地理的な領域に入った/出たことを検知できる 仕組み アプリが起動していない状態でも、出入り があったときに起動してくれる → バッテリーに優しい機能を提供可能 ジオフェンスとは
事情 シミュレータを使った開発ができない アプリで使っている3rdパーティライブラリにシミュレータ のフレームワークが用意されていないため iOSは実機での位置偽装が手軽にできない Androidは手軽にできる → 外に出て確認する必要があった
今日話すこと Q iOS実機でのジオフェンス機能の確認で役立ったこ0 Q AndroidとiOS両方実装したので、各OSの仕様の違いを踏まえて紹介 API iOS17以降で使える新しい方法がありますが、 今回は古くから使えるCLLocationManagerの機能を使った実装となっています
ジオフェンスを使った機能の開発 ( 位置情報の許可を取得する G CLLocationManagerの startMonitoringを呼ぶ S 通知を受け取る delegateを定義する 「常に許可」が必要
ジオフェンスを使った機能の開発 ( 位置情報の許可を取得する G CLLocationManagerの startMonitoringを呼ぶ region = ( :
CLLocationCoordinate2D( : , : ), : , : ) . . ( : region) let self CLCircularRegion center latitude longitude radius identifier startMonitoring for 139.7150326 35.6671881 500 "identifier" locationManager 通知を受け取る delegateを定義する 範囲指定
ジオフェンスを使った機能の開発 ( 位置情報の許可を取得する G CLLocationManagerの startMonitoringを呼ぶ extension func : {
( manager: , region: ) { ( : region) } } AppDelegate CLLocationManagerDelegate CLLocationManager CLRegion locationManager didEnterRegion _ handleGeofenceEnter region 通知を受け取る delegateを定義する
ジオフェンスを使った機能の開発 ( 位置情報の許可を取得する G CLLocationManagerの startMonitoringを呼ぶ S 通知を受け取る delegateを定義する extension
func : { ( manager: , region: ) { ( : region) } } AppDelegate CLLocationManagerDelegate CLLocationManager CLRegion locationManager didEnterRegion _ handleGeofenceEnter region かんたん!
開発時苦労したことが結構ありました
事象その1 : 通知が来ない
事象その1 通知が来ない 実装できた! いざ、ジオフェンスを設置した駅へ! ジオフェンスを設置したはずの範囲に近づいても一向に通知が来ない‥
事象その1 通知が来ない 原因 a 緯度経度の測地系の問P a アプリでは世界測地系を利用しているが、バック エンドから渡される測地系が日本測地系になって い a
決まった方向、距離にずれる 想定した範囲 実際設置された範囲
事象その1 通知が来ない 対処 R 開発用メニューに、地図にジオフェンス範囲を表示 する設定を追2 R 地図上に、ジオフェンスを設置した位置を可視 R どの範囲に設置されているかわかりやすくなる
事象その2 : 再び、通知が来ない
事象その2 再び、通知が来ない 無事ジオフェンス通知が来るようになった。 しかし、ある時からジオフェンスを設置したは ずの範囲に近づいても通知が来ない‥
事象その2 再び、通知が来ない 原因 Q ジオフェンスの設置可能上限の問h Q iOSのジオフェンスの設置上限は、1アプリ20個まD Q 実装して、外に出て確認、 を何度も繰り返しているうちにジオフェンス設置上
限に達してしまっw Q Androidのジオフェンスの設置上限は、1アプリ100 個までだったので油断していた
対処1 4 startMonitoringが失敗していたことに気づかなかったのが問0 4 成功/失敗のdelegate通知を拾い、開発中はNotificationで表示するようにした func func any (_ manager:
, region: ) { // ジオフェンス設置成功 } (_ manager: , region: ?, error: ){ // ジオフェンス設置失敗 } locationManager didStartMonitoringFor locationManager monitoringDidFailFor withError CLLocationManager CLRegion CLLocationManager CLRegion Error 事象その2 再び、通知が来ない
対処2 F 設置しようとした時に、上限に達していたらエラーUIを出す ようにした (設置中のジオフェンスはmonitoredRegionsで取得可能 F Androidは100個までだったので、エラー考慮をしていな かったのですが、後でエラーUIを追加しました CLLocationManager.
: < > monitoredRegions Set CLRegion 事象その2 再び、通知が来ない
事象その3 : 通知が遅れる
事象その3 通知が遅れる 公共交通機関での移動時の利用を想定 固定で300mといった共通範囲で実装していたが、 バスや電車に乗って確認してみると、、 バスでは良い感じだけど電車では遅すぎる…といった 挙動
事象その3 通知が遅れる 原因 c 範囲内に入ったらすぐにジオフェンス通知が来るわけではなく、 何かしらの判定をしてから通知を行っていそe c (今はないが)公式ドキュメントに、 「範囲内に入ってから、20秒同じ位置にいた場合に通知が来る」 という記載があったことがあるらしR
c 移動スピード他、環境によっても通知の受信にばらつきが出そう (地下鉄が遅いのは予想どおり)
事象その3 通知が遅れる 対処 移動手段共通の範囲、を変更し 範囲を設定してもらうような仕様にした
まとめ 通知が来ない ' ジオフェンスを設置した範囲を可視化しよう それでも、通知が来ない ' 開発時は失敗のNotificationを出したり、ジオフェンス上限 エラーを考慮したUIを提供しよう 通知が遅れる '
ジオフェンス通知の遅れを考慮した仕様にしよう
素敵なジオフェンスライフを!