2014-01-17 56 views
4

無論何時在設備上完成新安裝,我們都會嘗試使用某種可在實體店中兌換的優惠券進行獎勵。我們對此做了一些試驗,並驗證它是基於IMEI & IMSI的新設備。但是我們發現人們在一些可以操縱這些ID並模仿新設備的模擬器上執行此操作。這怎麼可以避免?什麼是最好的方式來找出一個Android設備是真實的?

目前,我們正在使用這樣

TelephonyManager m_telephonyManager = (TelephonyManager) context.getSystemService(serviceName); 
    String IMEI, IMSI; 
    IMEI = m_telephonyManager.getDeviceId(); 
    IMSI = m_telephonyManager.getSubscriberId(); 
    return IMEI + ":" + IMSI; 

我相信,有一種方法,因爲它的驅動安裝正確的廣告聯盟,每個設備屬性它只有一次。

+2

'ID可以被操縱 - 即使你使用IMEI的代碼可以被操縱,黑客可以改變它從外部文件加載ID。 – marcinj

+0

廣告網絡還具有可以跟蹤的連接和其他因素的IP。即使他們會有一些誤報。 – zapl

+1

關於[如何檢測Android應用程序在模擬器中運行?]的各種答案?(http://stackoverflow.com/questions/2799097/how-can-i-detect-when-an-android-application-是運行的,在最模擬器?answertab = votes#tab-top)和[如何從代碼中發現我的Android應用程序是否在仿真器或真實設備上運行?](http://stackoverflow.com/questions/6864251/how-to-find-out-from -code-IF-MY-Android的應用程序 - 運行 - 在仿真器,或實時的設備)。讓我們知道這些解決方案是否都不起作用,以防萬一您正在尋找不同的東西:) –

回答

0

讓他們在商店中的設備上顯示應用+生成的代碼。這似乎是你目前的方案可以防水的唯一方法。或者只是不要使用設備ID作爲標識,但要找出其他一些促銷方案;)

2

您可以使用這些方法中的任何一種來檢查您的應用程序是否正在模擬器中運行。但這些並不是100%可靠的,但這些方法的組合可能會幫助你更好。

方法1

if (android.os.Build.MODEL.equals(「sdk」)) { 
    // emulator 
} else { 
    //not emulator 
} 

方法2

嘗試設置您的清單有一些硬件這是不正常的仿真器支持的依賴。例如:

<uses-feature android:name="android.hardware.sensor.accelerometer" 
       android:required="true" /> 

方法3

嘗試使用

Build.FINGERPRINT.contains("generic") 

這些發現應用程序是否在模擬器中運行某些方面。希望這可以幫助。

0

這不是您的問題的答案,而是一個關於如何獲得唯一ID的建議。使用用戶手機號碼作爲唯一ID。 的問題是,得到的電話號碼是不平凡的作爲可以在這裏看到:

MSISDN : Is it a SIM Card Data? Why all The Provided Function (from Blackberry and Android) to fetch MSISDN not reliable?

因此,你可以做的是實現一個基本的握手過程,通過用戶輸入自己的手機號碼,這是發送到您的服務器。您的服務器然後發送一條短信給您的應用程序可以收聽的給定號碼。一旦收到確認文本,就會將成功消息發送回服務器,並且您知道該電話號碼是有效且唯一的。

希望這是有道理的,所有與您的項目最好。

相關問題