2014-05-22 79 views
4

所以最初的要求是,在應用程序的啓動時,移動應用程序將獲得用戶的當前位置精確到城市。基於城市,服務器/應用程序客戶端將提供城市相關內容。如何在不使用核心位置服務的情況下獲取用戶的當前城市名稱?

我知道,如果我可以使用核心位置服務(因爲您知道可疑(自我關心)用戶通常會禁用不太信任的應用程序的位置服務),這不會太困難。

我已經在網上搜索了幾個小時,並獲得了以下解決方案的摘要,在這些解決方案中,我需要您的幫助來決定哪一個可能是我的最佳選擇,或者您是否有其他更好的選項。

使用[NSlocale autoupdatingCurrentLocale]

缺點:

  • 從蘋果公司的文件調用的返回值不填解釋道:「區域是從當前的設置形成用戶選擇的系統區域設置覆蓋了用戶在系統偏好設置中指定的任何自定義設置。「從中我不明白什麼是「用戶在系統偏好設置中指定的自定義設置」 reference link

  • b。該值可能會產生誤導,並且與用戶當前的實際城市/國家根本無關。

評論:我將不勝感激,如果任何人都可以解釋我的語言環境是如何根據用戶的設置更改。

獲取當前iPhone時區

NSTimeZone *localTime = [NSTimeZone systemTimeZone]; 
NSLog(@"Current local timezone is %@",[localTime name]); 

缺點:

  • 一個。與上面的項目b相同,因爲用戶總是可以指定而不是讓系統自動更新時區。
  • b。精確度被壓縮,只有首都會上市。

評論:不是非常有前途的,但容易實現

使用基於我的閱讀IP基於位置檢測Web服務 ,過程中會涉及到的應用程序向服務器發送一個請求,其中所述服務器將記錄該請求的IP(不要認爲應用程序本身可以正確地獲得它自己的IP,因爲它可能在本地網絡中)基於通過某些第三方服務記錄的IP(具有IP分貝或一些其他可用的API ),它會返回cit y信息返回給客戶。

缺點:

  • 一個。我從來沒有實現過這樣的事情,不知道它是否適用於移動應用程序。
  • b。即使有可能,也不知道它是否比核心位置服務更快。

評論:如果您知道這是可能的iOS應用程序這樣做,請讓我知道。

如果您知道,請給我任何想法或建議任何更好的解決方案。

非常感謝。

回答

1

避免所有麻煩的預防措施是創建一個不會出現「不那麼信任」並使用核心位置獲取位置的應用程序。如果用戶仍然不允許您的應用程序知道位置,並且知道他的城市是必須的,那麼讓他從列表中選擇一個城市,其中可以找到內容。當然這會打開一個巨大的洞,允許用戶獲取任何城市的內容。只有你可以決定這是否是一個可以接受的簡單實施權衡。

如果您必須在沒有核心位置的情況下自動了解CITY,則您提到的前兩個選項'locale'和'time zone'是無用的,因爲它們每個都包含大量城市。另外,正如你所提到的,它們取決於用戶的設置。

因此,使用GeoIP或某些此類服務反向地理編碼Web服務請求的IP地址是最佳選擇。你可以在網上找到很多討論和參考資料。

0

NSlocale可能非常不準確。我的同事從新西蘭購買了iPhone(他在那裏學習)。當我測試他的電話以獲取語言環境時,它仍顯示爲新西蘭英語。

使用IP是可能的。我做了一個快速的搜索,我發現: -

  1. Find IP address in iphone

  2. how to get ip address of iphone programmatically

你可能想從上面的鏈接將一個很好看的。

我仍然認爲使用核心位置是獲取用戶位置的最佳方式。

相關問題