Android device ID

    其實就是這篇的翻譯XD 2011的文章了…

    Identifying App Installations



    如何辨認unique device?
    • 需要是reliable, stable, uniqiedevice id
    • 在手機易主或Factory resets後,應該要改成新的
      -> TelephonyManager.getDeviceId()
      就不行,它會回傳IMEI for GSM, ESN for CDMA phones
    • 所以合理的作法是 track app installation
    • google phone app?

    怎麼track installation?
    app中自創一個Installation class

    但如果需要硬體編號怎麼辦?
    頗為棘手,當以前Android都是手機時,可以用TelephonyManager.getDeviceId(),能得到電話的 IMEI, MEID, or ESN,但有這些問題:
    1. 不是手機的硬體沒有這些id
    1. Device data wipesfactory resets不會改變這些值。
    1. 需要 READ_PHONE_STATE 的權限。
    2. 有些手機存在bug,會回傳garbage,zeros or asterisks

    MAC address?
    不推薦,因為不是沒有device都有WiFi,而且如果Wifi不是turn on,硬體有可能不會回傳MAC address

    Android OS Serial Number?
    透過android.os.Build.SERIAL得到 device ID,需要Android 2.3以上。

    使用Android_ID
    機器第一次開機時產生Setting.Secure.ANDROID_ID,一個64-bit數字,並在device wipedreset。但是在Android 2.2無法100%可靠。而且有一隻熱門的手機,每隻的ANDROID_ID是相同的。

    結論
    大部份的application,需要辦認的是particular installation,不是physical device,可以簡單地解決。
    有很多理由讓我們避免辨認某個device。如果真的需要辨認,最好的方式是用ANDROID_ID

Comments