2015-09-25 11 views
11

サーバ上にユーザデバイスを登録する必要があります。ユーザデバイスは、一定の値で一意の識別子を持つサーバに登録する必要があります。Android - ユニークで一定のデバイスID

私はすべてのデバイス(SIMカードあり/なし)から一意のIDを取得するための良い解決策を見つけることができません。

Secure.ANDROID_ID:Secure.ANDROID_IDは一意ではなく、工場出荷時のリセット時にはnullでもかまいません。

String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); 

IMEI:IMEIはデバイスのSimcardのスロットに依存しているので、Simcardのを使用していないデバイスのためのIMEIを取得することはできません。

TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
String uuid = tManager.getDeviceId(); 

WLAN MACはアドレス:デバイスは、無線LANのハードウェアを持っていない場合、それがnullのMACアドレスを返します。ユーザーはデバイスのMACアドレスを変更することができます。

WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress(); 

Bluetoothアドレス文字列:デバイスは、Bluetoothハードウェアをしていない場合、それはnullを返します。

BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
String m_bluetoothAdd = m_BluetoothAdapter.getAddress(); 

Instance id:ユーザーがアンインストールし、アプリを再インストールするときINSTANCE_IDが変更されます。それは一定の価値ではありません。

すべてのAndroid搭載端末(SIMカード搭載、Bluetooth搭載...なし)から一意のIDを取得する方法はありますか?ヌルにすることはできません。アプリをアンインストール/再インストールしても変更されません。

+0

SIMカードとWiFiの両方を持たないタブレットは、存在しないか、またはリモートで使用できないことに注意してください。あなたは両方の組み合わせを考えましたか? –

+0

@STTLCU no。ユーザーはMACアドレスを変更することができます。 –

+0

@STTLCUあなたの周りにはどの錠剤があるのか​​分かりませんが、私が知っている人はほとんどがSIMカード付きの錠剤を持っています。 –

答えて

3

Secure.ANDROID_IDが最適な選択であることがわかりました。これはデバイスが最初に起動するときに生成され格納される64ビットの量です。ただし、デバイスの工場出荷時設定にリセットされます。

いくつかのデバイスがすべてのインスタンスで同じSecure.ANDROID_IDを持っていることを示すレポートがあります。

Secure.ANDROID_IDに余分な項目(simシリアル、GCMインスタンスIDなど)を追加して、新しい独自のフィンガープリントを生成することができます。

0

Secure.ANDROID_IDは唯一の友だちです。しかし、古いデバイス(< 2.3)ではいくつかの問題(空の結果)があります。他のすべてのIDは、すべてのタイプのデバイスで機能しません。

も読んIs there a unique Android device ID?

2

みとめユーザーがSecure.ANDROID_IDが同じAndroidデバイス上のすべてのユーザーのために異なっているAndroidデバイス上のセットアップとすることができます。したがって、Secure.ANDROID_IDを使用すると、デバイス上の各ユーザー設定ごとに異なるデバイスとして登録されます。

+0

** ANDROID_ID **はデバイスは工場出荷時にリセットされます。したがって、永続的ではありません。 –

関連する問題