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
SwiftでのGeoFence機能実装
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
satoshi0212
August 20, 2016
11k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SwiftでのGeoFence機能実装
satoshi0212
August 20, 2016
More Decks by satoshi0212
See All by satoshi0212
macOSで自分のカメラを作ってみよう - Core Media IO Extensions
satoshi0212
3
1.7k
NDIとARKitを連動させた新しい映像表現
satoshi0212
3
1.3k
100日間AR表現を実装して見つけた面白い実装を全力解説
satoshi0212
5
2.3k
Working on mobile AR implementation, what I've implemented and beyond
satoshi0212
0
570
仮想カメラで切り開く拡張現実の世界
satoshi0212
0
670
macOS仮想カメラ「テロップカム」 実装方法とその先
satoshi0212
5
4k
ARで悪の組織の会議を実現する
satoshi0212
0
630
クロマキー合成を使い透過動画をAR空間に表示する
satoshi0212
3
10k
ARKit Maniacs
satoshi0212
1
3.8k
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
200
30 Presentation Tips
portentint
PRO
1
360
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
Producing Creativity
orderedlist
PRO
348
40k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
My Coaching Mixtape
mlcsv
0
180
Abbi's Birthday
coloredviolet
3
8.9k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Transcript
SwiftͰͷGeoFenceػೳ࣮ Tips Λఴ͑ͯ ෦ ஐ satoshi0212 גࣜձࣾΤΫεϥΠζ νʔϑΤϯδχΞ
ࣗݾհ iOSΞϓϦΤϯδχΞ ΧϦϑΥϧχΞभཱେֶίϯϐϡʔλαΠΤϯεֶ෦ଔ גࣜձࣾΤΫεϥΠζॴଐ
ࣗݾհ ৽͍ٕ͠ज़ͱɺͦͷগ͠มΘ͍ͬͨํ͕େ͖ ɹTechCrunch Tokyo 2015 Hackathon ༏ल ɹMizuho.Hack ༏ल ɹMicrosoft
MPC Hackathon TMCN ɹHack Cars Days 2015 χϑςΟ ɹMUSICIANS HACKATHON 2015 ༏ल ɹɹͳͲ
ࠓ͢༰ GeoFenceػೳͱ ɹ1. ಛͱ੍ݶ ɹ2. ࣮ํ๏ ɹ3. Tips໘ͨ͠ͳͲ ·ͱΊ
ࠓ͢༰ GeoFenceػೳͱ ɹ1. ಛͱ੍ݶ ɹ2. ࣮ํ๏ ɹ3. Tips໘ͨ͠ͳͲ ·ͱΊ
GeoFenceػೳͱ ʮҐஔใαʔϏεΛ༻ͯ͠ɺطͷཧతҐஔʹ͍ͭ ͯͷ͋ΒΏΔਐೖ·ͨୀग़Λݕग़͠·͢ʯ "ҐஔใͱϚοϓϓϩάϥϛϯάΨΠυ" ΑΓ
GeoFenceػೳͱ ʮҐஔใαʔϏεΛ༻ͯ͠ɺطͷཧతҐஔʹ͍ͭ ͯͷ͋ΒΏΔਐೖ·ͨୀग़Λݕग़͠·͢ʯ "ҐஔใͱϚοϓϓϩάϥϛϯάΨΠυ" ΑΓ
GeoFenceػೳͱ ʮҐஔใαʔϏεΛ༻ͯ͠ɺطͷཧతҐஔʹ͍ͭ ͯͷ͋ΒΏΔਐೖ·ͨୀग़Λݕग़͠·͢ʯ "ҐஔใͱϚοϓϓϩάϥϛϯάΨΠυ" ΑΓ
GeoFenceػೳͱ ʮͨͱ͑ɺॴఆͷυϥΠΫϦʔχϯάళʹ͍ۙͮͨͱ͖ɺ ্͕͍ͬͯΔΛड͚औΔΑ͏௨͢ΔΞϓϦέʔγϣ ϯ͕ߟ͑ΒΕ·͢ʯ"ҐஔใͱϚοϓϓϩάϥϛϯάΨΠυ" ΑΓ
GeoFenceػೳͱ ɹAppleެࣜʹ“Geographical Region Monitoring” ɹຊޠͰʮཧతྖҬͷ؍ଌʯ
Ґஔใ࣮ํ๏ͷ؆୯ͳ·ͱΊ
1 Standard Location 2 Background Location Session 3 Beacon Ranging
4 Geographical Region Monitoring 5 Visit Monitoring 6 Significant Location Change Monitoring Ґஔใ࣮ํ๏ͷ؆୯ͳ·ͱΊ
1 Standard Location ඪ४Ґஔใ 2 Background Location Session όοΫάϥϯυ ͰͷҐஔใ
3 Beacon Ranging ϏʔίϯྖҬ؍ଌ 4 Geographical Region Monitoring ཧతྖҬ؍ଌ 5 Visit Monitoring ๚ઌ 6 Significant Location Change Monitoring େ෯มߋҐஔใ Ґஔใ࣮ํ๏ͷ؆୯ͳ·ͱΊ
4VTQFOEFE /PU3VOOJOH U3VOOJOH 1 Standard Location ඪ४Ґஔใ 2 Background Location
Session όοΫάϥϯυ ͰͷҐஔใ 3 Beacon Ranging ϏʔίϯྖҬ؍ଌ ✔ 4 Geographical Region Monitoring ཧతྖҬ؍ଌ ✔ 5 Visit Monitoring ๚ઌ ✔ 6 Significant Location Change Monitoring େ෯มߋҐஔใ ✔ Ґஔใ࣮ํ๏ͷ؆୯ͳ·ͱΊ
4VTQFOEFE /PU3VOOJOH U3VOOJOH ಛ 1 Standard Location ඪ४Ґஔใ 2 Background
Location Session όοΫάϥϯυ ͰͷҐஔใ 3 Beacon Ranging ϏʔίϯྖҬ؍ଌ ✔ σόΠεઃஔ 4 Geographical Region Monitoring ཧతྖҬ؍ଌ ✔ ҙͷՕॴొ 5 Visit Monitoring ๚ઌ ✔ ॴొͳ͠ 6 Significant Location Change Monitoring େ෯มߋҐஔใ ✔ େ͖͘Ҡಈͨ͠ ߹ Ґஔใ࣮ํ๏ͷ؆୯ͳ·ͱΊ
ࠓ͢༰ GeoFenceػೳͱ ɹ1. ಛͱ੍ݶ ɹ2. ࣮ํ๏ ɹ3. Tips໘ͨ͠ͳͲ ·ͱΊ
ಛ
ಛ 1. SuspendedɺNot Runningͷঢ়ଶͰݕಈ࡞ܧଓ
ಛ 1. SuspendedɺNot Runningͷঢ়ଶͰݕಈ࡞ܧଓ ɹɹˠ ͭ·ΓΞϓϦ͕ࢮΜͰ͍ͯݕՄೳʂ
ಛ 1. SuspendedɺNot Runningͷঢ়ଶͰݕಈ࡞ܧଓ 2. লόοςϦʔফඅ
ಛ 1. SuspendedɺNot Runningͷঢ়ଶͰݕಈ࡞ܧଓ 2. লόοςϦʔফඅ 3. ՃσόΠεෆཁͰҙͷΛొՄೳ
੍ݶ
1. ਫ਼ͷݶք : ੍ݶ
1. ਫ਼ͷݶք : ʮςετతͷ߹ɺ࠷খڑ200ϝʔτϧͰ͋Δ ͱԾఆ͢Δ͜ͱ͕Ͱ͖·͢ɻʯ “ҐஔใͱϚοϓ ϓϩάϥϛϯάΨΠυ” ΑΓ ੍ݶ
1. ਫ਼ͷݶք : 100m୯Ґ ʮςετతͷ߹ɺ࠷খڑ200ϝʔτϧͰ͋Δ ͱԾఆ͢Δ͜ͱ͕Ͱ͖·͢ɻʯ “ҐஔใͱϚοϓ ϓϩάϥϛϯάΨΠυ” ΑΓ ੍ݶ
1. ਫ਼ͷݶք : 100m୯Ґ 2. ݕλΠϛϯάͷ͞ : ੍ݶ
1. ਫ਼ͷݶք : 100m୯Ґ 2. ݕλΠϛϯάͷ͞ : ʮϢʔβͷҐஔ͕ྖҬͷڥքઢΛԣஅ͠ɺ͜ͷڥքઢ͔Β ࠷খڑ͚ͩΕ͔ͯΒɺ͜ͷҐஔΛগͳ͘ͱ20ඵؒอ ࣋͠ͳ͍ͱɺ௨ใࠂ͞Ε·ͤΜɻʯ
“ҐஔใͱϚοϓ ϓϩάϥϛϯάΨΠυ” ΑΓ ੍ݶ
1. ਫ਼ͷݶք : 100m୯Ґ 2. ݕλΠϛϯάͷ͞ : ʮϢʔβͷҐஔ͕ྖҬͷڥքઢΛԣஅ͠ɺ͜ͷڥքઢ͔Β ࠷খڑ͚ͩΕ͔ͯΒɺ͜ͷҐஔΛগͳ͘ͱ20ඵؒอ ࣋͠ͳ͍ͱɺ௨ใࠂ͞Ε·ͤΜɻʯ
“ҐஔใͱϚοϓ ϓϩάϥϛϯάΨΠυ” ΑΓ ɹɹIN : 10ඵҎ ɹɹOUT : 1ʙ15ఔͷΕ ੍ݶ
1. ਫ਼ͷݶք : 100m୯Ґ 2. ݕλΠϛϯάͷ͞ : Outݕ1ʙ15ޙ ʮϢʔβͷҐஔ͕ྖҬͷڥքઢΛԣஅ͠ɺ͜ͷڥքઢ͔Β ࠷খڑ͚ͩΕ͔ͯΒɺ͜ͷҐஔΛগͳ͘ͱ20ඵؒอ
࣋͠ͳ͍ͱɺ௨ใࠂ͞Ε·ͤΜɻʯ “ҐஔใͱϚοϓ ϓϩάϥϛϯάΨΠυ” ΑΓ ɹɹIN : 10ඵҎ ɹɹOUT : 1ʙ15ఔͷΕ ੍ݶ
1. ਫ਼ͷݶք : 100m୯Ґ 2. ݕλΠϛϯάͷ͞ : Outݕ1ʙ15ޙ 3. ొ:
੍ݶ
1. ਫ਼ͷݶք : 100m୯Ґ 2. ݕλΠϛϯάͷ͞ : Outݕ1ʙ15ޙ 3. ొ:
1ΞϓϦʹ͖ͭ20Օॴ·Ͱ ੍ݶ
ಛͱ੍ݶ ಛ: ɹ1. SuspendedɺNot Runningͷঢ়ଶͰݕಈ࡞ܧଓ ɹ2. লόοςϦʔফඅ ɹ3. ՃσόΠεෆཁͰҙͷΛొՄೳ ੍ݶ:
ɹ1. ਫ਼ͷݶք : 100m୯Ґ ɹ2. ݕλΠϛϯάͷ͞ : Outݕ1ʙ15ޙ ɹ3. ొ: 1ΞϓϦʹ͖ͭ20Օॴ·Ͱ
ࠓ͢༰ GeoFenceػೳͱ ɹ1. ಛͱ੍ݶ ɹ2. ࣮ํ๏ ɹ3. Tips໘ͨ͠ͳͲ ·ͱΊ
࣮ํ๏
1. ҐஔใऔಘڐՄ ࣮ํ๏
1. ҐஔใऔಘڐՄ ɹɹinfo.plist ɹɹʮNSLocationAlwaysUsageDescriptionʯՃ ࣮ํ๏
// γϯάϧτϯͷϚωʔδϟΫϥε // GeoFenceManager.swift import CoreLocation private let locationManager =
CLLocationManager() override init() { super.init() self.locationManager.delegate = self // Ґஔใ༻ڐՄ֬ೝ(Always) self.locationManager.requestAlwaysAuthorization() }
// γϯάϧτϯͷϚωʔδϟΫϥε // GeoFenceManager.swift import CoreLocation private let locationManager =
CLLocationManager() override init() { super.init() self.locationManager.delegate = self // Ґஔใ༻ڐՄ֬ೝ(Always) self.locationManager.requestAlwaysAuthorization() }
None
2. ྖҬ؍ଌ։࢝ ࣮ํ๏
// ؍ଌྖҬੜ let coordinate = CLLocationCoordinate2DMake(35.658517,139.701334) let region = CLCircularRegion(center:
coordinate, radius: 200, identifier: “ौ୩Ӻ”) // ؍ଌ։࢝ self.locationManager.startMonitoringForRegion(region)
2. ྖҬ؍ଌ։࢝ ࣮ํ๏
3. IN/OUT ݕ࣌ͷॲཧΛ࣮ ࣮ํ๏
// GeoFenceManager.swift // ྖҬʹೖͬͨ௨ड৴ func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion)
{ if region is CLCircularRegion { print("GeoFence: In") } }
// GeoFenceManager.swift // ྖҬ͔Βग़ͨ௨ड৴ func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion)
{ if region is CLCircularRegion { print("GeoFence: Out") } }
// GeoFenceManager.swift // ྖҬ؍ଌΛऴྃ func stopMonitoringGeoFenceItem(geoFenceItem: GeoFenceItem) { for region
in self.locationManager.monitoredRegions { if region.identifier == geoFenceItem.identifier { self.locationManager.stopMonitoringForRegion(region) } } }
DEMO 1. ͱܘઃఆ͠ྖҬࢹ։࢝ 2. ΞϓϦΛkill 3. γϛϡϨʔλͰҐஔಈ࡞ςετ 4. LINE BOT௨
ࠓ͢༰ GeoFenceػೳͱ ɹ1. ಛͱ੍ݶ ɹ2. ࣮ํ๏ ɹ3. Tips໘ͨ͠ͳͲ ·ͱΊ
ɾҐஔใ+ϝλใͷΫϥεΛ࡞ΓUserDefaultsͰอ࣋ ɾSingletonͷManagerΫϥεͰCLLocationManagerΛอ࣋ ɾIdentifierʹUUIDΛઃఆ͍ͯ͠Δ ɾྖҬ؍ଌ։࢝࣌ʹطʹྖҬʹඋ͑ঢ়ଶݕΛग़͢ ɾॳظ༗ޮ࣌ͷػ࣌ؒॲཧ ɾNSLogͩͱSystemLogʹΔ(printͰΒͳ͍) ɾγϛϡϨʔλͰҐஔઃఆ͠։ൃ ɾRegion MonitoringશফڈॲཧΛ࡞͓ͬͯ͘ͱศར ɾΞϓϦফ͢ͱྖҬ؍ଌͯ͢ফ͑Δ
Tips
ɾҐஔใ+ϝλใͷΫϥεΛ࡞ΓUserDefaultsͰอ࣋ ɾSingletonͷManagerΫϥεͰCLLocationManagerΛอ࣋ ɾIdentifierʹUUIDΛઃఆ͍ͯ͠Δ ɾྖҬ؍ଌ։࢝࣌ʹطʹྖҬʹඋ͑ঢ়ଶݕΛग़͢ ɾॳظ༗ޮ࣌ͷػ࣌ؒॲཧ ɾNSLogͩͱSystemLogʹΔ(printͰΒͳ͍) ɾγϛϡϨʔλͰҐஔઃఆ͠։ൃ ɾRegion MonitoringશফڈॲཧΛ࡞͓ͬͯ͘ͱศར ɾΞϓϦফ͢ͱྖҬ؍ଌͯ͢ফ͑Δ
Tips
ɾҐஔใ+ϝλใͷΫϥεΛ࡞ΓUserDefaultsͰอ࣋ ɾSingletonͷManagerΫϥεͰCLLocationManagerΛอ࣋ ɾIdentifierʹUUIDΛઃఆ͍ͯ͠Δ ɾྖҬ؍ଌ։࢝࣌ʹطʹྖҬʹඋ͑ঢ়ଶݕΛग़͢ ɾॳظ༗ޮ࣌ͷػ࣌ؒॲཧ ɾNSLogͩͱSystemLogʹΔ(printͰΒͳ͍) ɾγϛϡϨʔλͰҐஔઃఆ͠։ൃ ɾRegion MonitoringશফڈॲཧΛ࡞͓ͬͯ͘ͱศར ɾΞϓϦফ͢ͱྖҬ؍ଌͯ͢ফ͑Δ
Tips
ɾྖҬͰྖҬࢹ։࢝ͨ͠ࡍʹ࣌ʑࣦഊ͢Δ ɾελδΞϜۙྡॅຽ ɾྖҬࡏͰ௨͕ԿདྷΔ ɾԼమͰؼΔਓ ɾಛٸʹͬͨΒ௨དྷͳ͔ͬͨ ɾαʔόͷ௨৴͕͍ ɾొՕॴ20ݸͷ੍ݶಥഁํ๏ ɾҐஔใِͷରࡦ ໘ͨ͠
ɾྖҬͰྖҬࢹ։࢝ͨ͠ࡍʹ࣌ʑࣦഊ͢Δ ɾελδΞϜۙྡॅຽ ɾྖҬࡏͰ௨͕ԿདྷΔ ɾԼమͰؼΔਓ ɾಛٸʹͬͨΒ௨དྷͳ͔ͬͨ ɾαʔόͷ௨৴͕͍ ɾొՕॴ20ݸͷ੍ݶಥഁํ๏ ɾҐஔใِͷରࡦ ໘ͨ͠
ྖҬࡏͰ௨͕ԿདྷΔ
ʲݱʳ ɹ؍ଌྖҬʹډଓ͚ͨ࣌ɺಥવIN/OUT͕ൃੜͨ͠ɻ ɹෆఆظʹճൃੜɻ ྖҬࡏͰ௨͕ԿདྷΔ
ʲݱʳ ɹ؍ଌྖҬʹډଓ͚ͨ࣌ɺಥવIN/OUT͕ൃੜͨ͠ɻ ɹෆఆظʹճൃੜɻ ʲରԠʳ ɹݕͦͷͷͷ੍ޚ͍͠ɻ ɹϢʔεέʔε͔Βߟ͑ͯରԠɻ ɹˠʮ2࣌ؒܦա͍ͯͨ͠Β௨ʯ ɹɹʮ1ʹ1͚ͩ௨ʯͳͲϩδοΫͰରԠɻ ྖҬࡏͰ௨͕ԿདྷΔ
ࠓ͢༰ GeoFenceػೳͱ ɹ1. ಛͱ੍ݶ ɹ2. ࣮ํ๏ ɹ3. Tips໘ͨ͠ͳͲ ·ͱΊ
·ͱΊ ಛ: ɹ1. SuspendedɺNot Runningͷঢ়ଶͰݕಈ࡞ܧଓ ɹ2. লόοςϦʔফඅ ɹ3. ՃσόΠεෆཁͰҙͷΛొՄೳ ੍ݶ:
ɹ1. ਫ਼ͷݶք : 100m୯Ґ ɹ2. ݕλΠϛϯάͷ͞ : Outݕ1ʙ15ޙ ɹ3. ొ: 1ΞϓϦʹ͖ͭ20Օॴ·Ͱ
·ͱΊ ɾ࣮: ಈ͔͢ͷ͘͠ͳ͍ ɾ࣮ࡍ: ݱ࣮ੈքͰ͓͏ͱ͢Δͱʹ໘͢Δɻ ɹɹɹ ͍ํ͕ॏཁʂ·͡Ͱɻ
·ͱΊ ɾ࣮: ಈ͔͢ͷ͘͠ͳ͍ ɾ࣮ࡍ: ݱ࣮ੈքͰ͓͏ͱ͢Δͱʹ໘͢Δɻ ɹɹɹ ͍ํ͕ॏཁʂ·͡Ͱɻ ɹͰɺ࣮ࡍʹ௨͕དྷΔͱخ͍͠ʂ
ੋඇɺΩϨοΩϨͷΞϓϦΛ࡞͍ͬͯͩ͘͞ʂ
ऄ: GeoFenceϋοΧιϯ͋ͬͨΒ͜Μͳ࡞Γ͍ͨͳҊ ɾεϚʔτϗʔϜ ɹɹམͪࠐΜͩ࣌ʹެԂʹدͬͯؼΔͱՈి͕༏͍͠ ɹɹ͍ͷɺອը৽ץͷAmazonϦϯΫΛૹ৴ͯ͘͠Δ ɹɹδϜدͬͯؼΔͱϨϕϧΞοϓԻ ɾҰͷ༧ఆೖΕΔͱྑ͍ײ͡ʹॴ͕͖͔͚ͬͰϦϚΠϯμ ɾΧʔφϏΞϓϦ: ֶߍɺ͜ͲԂपลͩͱεϐʔυམͱ͢Έ ɹɹɹˠɹֶߍपลͰφϏͷΛࢠڙʹมߋ
ɾҧ͏֗ʹདྷΔͱBGM͕มΘΔ ɹɹɹˠɹ֗ͷใΛୡ + ԻָϥΠϒΠϕϯτͱ࿈ಈ ɾGeoFence࿈ͰͷԾύϯͣ͘φϏήʔγϣϯήʔϜ GeoFenceDemo ιʔείʔυ https://github.com/satoshi0212/GeoFenceDemo
ࢀߟURL ɾҐஔใͱϚοϓ ϓϩάϥϛϯάΨΠυ https://developer.apple.com/jp/documentation/LocationAwarenessPG.pdf ɾCore Location Best Practices https://developer.apple.com/videos/play/wwdc2016/716/ ɾApple
Sample Code: Regions: region monitoring, significant location changes, background location service, location service authorization https://developer.apple.com/library/ios/samplecode/Regions/Introduction/ Intro.html#//apple_ref/doc/uid/DTS40010726 ɾRegion Monitoring and iBeacon https://developer.apple.com/library/ios/documentation/UserExperience/ Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html