最近在做一個搜索附近3公里所有超市信息(已經錄入數據庫的超市信息)的功能。思路很簡單只是獲取用戶當前地理位置(經緯度),通過sql語句篩選出3公里范圍內的所有超市信息,然后傳遞到前台頁面展示出來。但是我是第一次通過移動端web獲取用戶地理位置,遇到很多的問題,我覺得我有必要記錄一下,一方面彰顯自己的成就,一方面想把經驗分享給大家。
移動web端獲取用戶地理位置很麻煩,因為涉及用戶隱私,所以web獲取用戶地理位置的方式很少而且精確度很低。我剛知道要做定位的功能,第一時間去看了百度地圖API,找到了web瀏覽器定位,說是瀏覽器定位其實也是通過用戶IP定位,我很快就完成這個所謂的搜索功能,覺得這真是太簡單了。但是事實並不是如此,我最開始測試的時候是用WiFi測試的,測試的結果發現精確度有點低,而且安卓端和ios端數據顯示還不一樣,根據我們的測試報告上說應該是ios更精准一些,這些還不算什么,因為我們只是搜索三公里范圍內的數據有些誤差也可以,但是一個致命的問題讓我不得不放棄了百度地圖。
這個致命問題就是,只要連接移動數據(不使用WiFi)全部都定位到合肥去了(測試使用的是安徽手機號),我百思不得其解,經過一番測試思考才明白所謂的ip定位是什么意思,也明白了所謂移動數據是什么?所謂的ip定位就是通過路由地址定位,移動網絡就是一個大的WiFi網絡環境,使用移動數據定位會定位到這個WiFi網絡的路由所在地,也就是合肥。這一結果讓我心涼,移動網絡不能定位這讓我們的需求也成了泡影,我不得不放棄已經完成的功能另外找尋找解決方案。
通過不停的搜索、尋找資料、詢問前輩,我找到了第二種解決方案——html5定位,這個比之前調用百度地圖的API簡單多了,我很快又一次完成了這個功能。html5定位無論是連接WiFi還是移動網絡都能定位到用戶所在位置,但是同樣也出現一個問題,使用WiFi比使用移動網絡精准,但是這不影響我們的功能需求,算是符合我們的要求,但測試人員並不打算放過我,最新的測試報告上說IOS端會彈出這么一段話Origin does not have permission to use Geolocation service,翻譯過來就是請求源沒有權限使用地理定位服務,我一臉懵逼。找了很多資料才明白,蘋果公司認為http請求都是不安全的所以拒絕為http請求提供地理定位服務,而我們公司使用的就是http請求。
我這時候有點絕望了,瘋狂的找解決方案,最后還真讓我找到了——騰訊地圖。我一直覺得騰訊很坑爹,網頁游戲都被人罵,但是這次不得不感謝它。騰訊地圖也是使用html5定位技術但人家是https請求,所以騰訊抓住了這個機會,建立一個類似中轉站的請求轉發(我個人的理解)。我們的請求會到騰訊的中轉站(https)然后在(https)返回給我們這樣我們的請求就是https請求IOS用戶端就會為我們的定位提供地理位置定位服務了,這次測試終於過了。
雖然過程很曲折但是結果還算不錯,總算滿足了定位的功能需求,也收獲了很多東西。
