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
SwiftでのGeoFence機能実装
Search
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.8k
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
600
仮想カメラで切り開く拡張現実の世界
satoshi0212
0
710
macOS仮想カメラ「テロップカム」 実装方法とその先
satoshi0212
5
4k
ARで悪の組織の会議を実現する
satoshi0212
0
660
クロマキー合成を使い透過動画をAR空間に表示する
satoshi0212
3
10k
ARKit Maniacs
satoshi0212
1
3.8k
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
600
Paper Plane
katiecoart
PRO
6
55k
The Curse of the Amulet
leimatthew05
4
17k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
400
The Cult of Friendly URLs
andyhume
79
7.1k
Building the Perfect Custom Keyboard
takai
2
950
Code Reviewing Like a Champion
maltzj
529
40k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
400
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
320
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
2
3.8k
Exploring anti-patterns in Rails
aemeredith
4
560
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