Swift — (1)IBeacon 定位器 簡單介紹,外加本地通知通知
他是蘋果所定義規範,蘋果有公開所有細節,蘋果產品一定有支援IBeacon Android手機也可以用
IBeacon可能使用的情境,他是拿來做室內定位器使用,IBeacon其實是一個定位器,他本身會廣播一個特殊格式內容,這特殊格式內容被手機收到之後,手機可以識別他,你是某某定位器,或者可以透過一些演算法,大概知道我的手機跟他距離為何,他只是廣播自己某個識別代碼,廣播這些東西出來之後,手機也只是收到這些東西,手機根本不可能拿到什麼促銷訊息,手機透過這些識別代碼,我現在靠近某一個IBeacon,我現在靠近某一些店,比如說我靠近7–11,當我知道我靠近他的時候,App上網去抓促銷訊息下來,他是作為定位之用,他本身不給資料,是定位之用,所以他用到是corelocation framework,以IBeacon來說他的使用情境,比如說我今天可能是一間店,甚至於連鎖店,我就很適合用IBeacon
舉例全家在各間店安裝IBeacon,然後鼓勵使用者用他們app,他可能會在門口放一個IBeacon,這IBeacon會發射一些無線訊號,以IBeacon來說他的無線訊號的廣播距離可以到達50米左右,他其實也是BLE,但他可到50米,因為他跟一般BLE不一樣,BLE我收到廣播,其實也可能超過30米,或者是40米,或50米,可是我收的到廣播,跟有沒有辦法跟他連上是兩回事,但IBeacon不一樣,IBeacon只廣播,我就廣播我的,然後你根本不用連上我,所以有你要訊息在廣播已經有了,所以IBeacon有機會可以讓他距離更遠,我在門口放一顆IBeacon之後,任何的使用者只要經過,他的app在背景就會收到,他靠近便利商店了,如果我是全家會員,我有裝全家的app,app就會在背景偵測到我靠近便利商店了,我的app在背景會被叫醒,然後他就會上網去抓促銷訊息,全家在這方面佈局已經很完整了,
IBeacon他只會廣播自己識別資訊,它的識別資訊包含以下這些
- ProximityUUID -他是一個完整長度的UUID,這個UUID可以讓我們識別這個IBeacon是不是我們要找的
舉例:假設我是便利商店主管,我現在要佈建全省便利商店IBeacon,這時候我會定義一個UUID出來,用很多工具或軟體可以幫我們隨機產出,我們產出一個UUID之後,全省大蓋有2000家店,每家店裝5顆IBeacon,就有一萬顆IBeacon,我就會通令這一萬顆IBeacon我全部用同一個UUID,都是用我指定的UUID,對於我們的app來說,我們app去監聽,我是否靠近某個IBeacon,我就去監聽這個UUID,我就會知道我現在靠近全家便利商店了
2.Major-是一個16bit長的unsigned數字(e.g 0x0001)這Major用途是,我是否是在某一個特定場域全家便利商店,因為ProximityUUID大家都一樣,但假設中壢店的 0x0001 台中店是 0x0002 等等
3.Minor-是一個16bit長的unsigned數字(e.g 0x0001),這可以更近一步,可以辨認我現在這間店裡面,或在這個場域裡面什麼位置,我今天如果在熟食區也許在0x0001,我今天如果在飲料區也許在0x0002

在位置隱私授權在使用IBeacon我都會使用always權限,因為IBeacon優勢在於我們app都會在背景,於是我偵測在這個IBeacon,我還是可以被叫醒,這是他最有魅力的功能
要求always權限

到info加入一些聲明位置授權字串,這樣才是把alway權限拿到手

接下來加一些IBeacon相關資源


他除了這基本型以外,他還有其他建構式



if state == .inside {
let message = “Iphone is inside the region\(region.identifier)”
}else {
let message = “Iphone is outide the region\(region.identifier)”
}
這兩個methods我打算用本地通知跳出來


本地推播分成新舊兩套會是以ios10為分點,蘋果10以後,推出usernotifications,在10以前都是用UIKit底下uilocalnotification,需獲得使用者授權



如果我們想要知道User與Ibeacon距離有多遠,CoreLocation就有一個機制,他可以幫我們做距離測量

接下來回有一個protocol methods 回報測量結果
