2011-06-16 58 views
1

我正在同時在android和iPhone上開發應用程序。由於我的地理位置應用程序的性質,重要的是信息來自真的來自電話,而不僅僅是恰好安裝了應用程序的仿真器。防止騙子:它真的是移動設備,還是仿真器?

是否有某種類型的值可以從設備中獲取以確定它是否是仿真器?我不希望用戶通過簡單地爲自己的緯度/經度座標設置自己的值來欺騙系統。我不知道什麼是愚蠢的證據,但我至少希望儘可能多地消除欺詐行爲。

我打算有適當的算法來驗證正在接收的數據,如跳躍n。英里數n。距離您最近的位置有幾秒鐘的時間 - 但是這可能會在某些情況下導致誤報 - 特別是在某些Android設備上,您可以在世界各地移動2英尺。

這適用於Android和iOS。任何電話的答案都可以。

回答

3

您可以使用[UIDevice currentDevice] .model獲取iOS的當前設備型號。 UIDevice class reference會給你可以比較的常量字符串。向下滾動到模型屬性以獲取更多信息。

沒有太多的android經驗,但this應該工作。

0

使用Android,事實證明,這要比確定您是否使用模擬器(可以使用上述Peter的鏈接完成)稍微複雜一點,因爲在「Development Settings」下的允許模擬位置(請參閱,例如,this app,允許用戶設置一個模擬位置,然後將提供給其他應用程序)。

根據您用來檢索位置提供者的方法(例如,使用LocationManager.getBestProvider()的返回值調用LocationManager.getProvider()),您最終可能會使用模擬提供者。我一直無法找到任何確定提供者是否是模擬的明確方法(例如,LocationProvider沒有屬性表明它是模擬,沒有表明它是假的位置的屬性等)。但是,您可以做的是閱讀Secure Settings以確定ALLOW_MOCK_LOCATION是否已啓用,並且不允許您的應用在此情況下運行;由於該設置是安全設置之一,因此無法通過編程方式進行更改。

相關問題