Push Notification系列歸納:編程
1.Push Notification簡介和證書說明及生成配置app
2.Push Notification的iOS處理代碼和Provider詳解框架
3.Push Notification的移動客戶端定位服務ide
正文: 學習
Push Notification的移動客戶端定位服務編碼
繼上一篇文檔後,消息推送功能基本能夠實現了。這篇的內容主要是總結一下iOS的定位服務功能,再與消息推送功能結合,知足更豐富的推送體驗。3d
先囉嗦一點定位服務的基礎:rest
iOS設備提供了3種不一樣的途徑進行定位:Wi-Fi、蜂窩式移動電話基站和GPS衛星。對象
GPS定位的優勢是準確和覆蓋面廣,可是在建築物裏面不易收到GPS衛星信號,同時比較費電。蜂窩基站不只偏差比較大,並且會耗費用戶較多流量。Wi-Fi定位是最經濟實惠的。blog
iOS的定位服務編程不像Android系統能夠指定採用哪一種途徑進行定位,由於API把底層這些細節屏蔽了,因此開發者和用戶並不知道設備正在採用哪一種方式定位,不過系統會採起最優方案,通常優先考慮GPS定位,其次爲Wi-Fi,最後纔會採用蜂窩基站定位。
在編程中,主要使用Core Location框架,定位時主要使用CLLocationManager、CLLocationManagerDelegate和CLLocation這3個類。
LLocationManager可以提供位置信息和高度信息,也能夠監控設備進入或離開某個區域,還能夠得到設備的運行方向。
CLLocationManagerDelegate是上述類的委託協議
CLLocation封裝了位置和高度信息
如推送服務同樣,在應用第一次安裝後請求位置時,系統會自動提示用戶。若是用戶拒絕定位服務,最好有代碼處理關閉定位服務,否則就算是侵犯了隱私權O_O
下面結合我寫的一個demo來具體說說:
這是個人demo文件目錄。這裏要介紹的主要內容在ViewController.m中。
新建一個定位服務的demo,須要添加CoreLocation.framework框架。
上圖是故事板的界面,作得比較簡單,主要用來熟悉定位服務自己的。右邊還有一個界面,是實現地圖導航的,在此就很少介紹了。
這裏是實現文件的屬性,注意添加委託協議<CLLocationManagerDelegate>
初始化定位服務管理對象。
簡要說明:
(1)desiredAccuracy屬性是用來肯定定位精度的,共有6個常量:
kCLLocationAccuracyNearestTenMeters
kCLLocationAccuracyHundredMeters
kCLLocationAccuracyKilometers
kCLLocationAccuracyThreeKilometers
kCLLocationAccuracyBest 設備使用電池供電時候最高的精度
kCLLocationAccuracyBestForNavigation 導航最高精度,通常在有外接電源時候才能使用。
精度越高,耗電越多,須要慎重調節定位精度。可是對於即刻定位後立刻就關閉的狀況,固然採用最高精度。
(2)distanceFilter屬性是距離過濾器,定義了設備移動多少距離才獲取一次位置更新信息,單位是米。這樣能夠避免無謂的位置更新請求。
初始化後,須要開啓和關閉更新位置信息,最好的代碼位置就是viewWillAppear方法和viewWillDisappear裏面。方法分別爲:startUpdatingLocation和stopUpdatingLocation。這裏是針對一直須要定位服務的本demo來講的。
上圖中還有監聽鍵盤顯示和隱藏的通知和顯示鍵盤的代碼,目的是不遮擋地址關鍵字輸入欄。隱藏鍵盤的時候,將地址關鍵字輸入欄恢復到初始位置
這裏是比較重要的委託方法。負責位置信息更新之後的代碼處理。個人demo是將位置的經緯度和海拔顯示到界面上,並進行地理信息反編碼,獲得位置的文字描述信息。
錯誤處理方法中,有判斷更新失敗的緣由,若是爲用戶禁止,則關閉位置更新服務。
我是在模擬器中運行,能夠自定義位置經緯度,如圖。
上面提到了地理信息反編碼,代碼以下:
相應的,也有地理信息編碼查詢,便是輸入地址關鍵字,查詢到詳細地址和對應位置信息。以下圖:
寫到這裏,定位服務的介紹和總結也結束了。瞭解了這個demo,我想和推送服務結合,獲取目標用戶的位置信息,應該也沒有什麼問題了。
這個系列也結束了。做爲學習iOS開發以來,作的第一個系列總結,內心仍是有點小激動呢0^_^0