2011-01-25 11 views
50

私はこのコールを使用しています:Secure.ANDROID_IDはデバイスごとに一意ですか?

Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID); 

は、デバイスのUIDを取得するには。私は複数のデバイスから同じIDを取得していると思います。これは可能でしょうか?

問題のIDは次のとおりです。9774d56d682e549cと明らかにいくつかのデバイスは、私はこのことについていくつかのことを読んだし、残念ながらANDROID_IDを一意に識別するために依拠すべきではないhttp://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403

+0

だと思いますか?あなたは確かですか? –

+0

問題のIDを検索し、それに関するスレッドを確認した後、私は確信しています。最初は、デバイスがnullを返している可能性があると思っていましたが、どこかでデフォルトとして設定していました。しかし、そうではありません。私は確かに、私は複数のデバイスで同じ値を得ていることを知っています。 – FoamyGuy

+0

完全に見つかりました:http://stackoverflow.com/a/16929647/1318946 –

答えて

25

これをチェックするとthread、。ただし、「工場出荷時の設定に変更できる」と記載されているので注意が必要です。自己責任で使用し、根付いた電話で簡単に変更できます。あたかも一部のメーカーが電話番号の重複した問題を持っているかのように見える。threadあなたのやりたいことに応じて、私はおそらくこれをUIDとして使用しません。

+12

ANDROID_IDの実装がとても恥ずかしいです。 Googleのドキュメントから判断すると、その意図はより長続きするIDであった。「デバイスの最初のブート時にランダムに生成され、デバイスの寿命の間一定でなければならない64ビットの数値(16進数文字列として)」 –

+1

このスレッドによれば [link](http://android-developers.blogspot.in/2011/03/identifying-app-installations.html) ** "また、よく知られている端末には、少なくとも1つの広く観察されたバグがありますすべてのインスタンスが同じANDROID_IDを持つ大手メーカーです」** **使いやすく** –

+1

これは2011年のFroyoからのものです。今は無関係です。 –

5

このIDを返すに問題があります個々のデバイス。

Androidのコンプライアンス要件に施行されていないようですので、メーカーはまた、など、彼らが選択した道は、より「モデル」IDとしてそれを使用して、いくつかを含め

をそれを実装するように見える、それさえも注意してくださいメーカーが発電機を書いて(例えば)それをUUIDにすると、工場のリセットから生き残ることは保証されません。

+3

私はそれが工場出荷時の設定に戻って生き残ることはできないと確信しています、それはドキュメントのどこかで言及されています。そして、それはそれを実装する正しい方法です。 –

13

したがって、デバイス自体に固有のものが必要な場合は、TM.getDeviceId()で十分です。

テレフォニーマネージャIDを取得する方法を示すコードです。使用しているアンドロイドのデバイスIDは工場出荷時の設定で変更できますし、一部のメーカーでも一意のIDを付与する際に問題があります。

TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 

Log.d("ID", "Android ID: " + Secure.getString(getContentResolver(), Secure.ANDROID_ID)); 
Log.d("ID", "Device ID : " + tm.getDeviceId()); 

だけで、ここでは広告IDをalternaitveソリューションをリスト

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
+3

はい、getDeviceId()を使用しても動作します。しかし、nullを返す可能性があるので、非常に注意する必要があります。 (3g /電話モデムのないデバイスの場合) 私が使用する解決策は、WifiのMACアドレスに紛失することです(当然ながら、同じデバイスにはないかもしれませんが、通常は同じデバイスにありません)。 – vdstw

+11

'READ_PHONE_STATE'パーミッションを要求していますひどい。代わりに 'ANDROID_ID'を使用してください。 – dolmen

+0

ええ、3gのないデバイス(市場にたくさんあります)にnullが返される可能性があるので、WiFiを使用する必要があります。デバイスの再起動後に少なくとも1回オン/オフするまでは、guidもnullになる可能性があります。そして、もしwifiがなければ...本当の悪夢は、Windows CE上に各デバイスのGUIDがあり、人生は美しいものでした。 – marcinj

1

を使用してTelephonyManagerの許可を取るようにしてください:

上記のリンクからコピー

https://support.google.com/googleplay/android-developer/answer/6048248?hl=en

広告IDは、Google Playサービスによって提供される広告用の、ユーザーが再設定できるユニークなIDです。ユーザーにコントロールを提供し、アプリの収益化を継続するためのシンプルで標準的なシステムを開発者に提供します。これにより、ユーザーはGoogle Playアプリ内で自分のIDをリセットしたり、パーソナライズされた広告(以前はインタレストベース広告)をオプトアウトすることができます。

制限は以下のとおりです。

  1. Googleが唯一の有効なデバイスを再生します。
  2. 個人情報保護方針:ANDROID_IDの動作が変更されますアンドロイドOでhttps://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
10

。 ANDROID_IDは、携帯電話のユーザーごとにアプリごとに異なります。撮影

https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html

アンドロイドID

Oでは、AndroidのID(Settings.Secure.ANDROID_IDまたはSSAID)が各アプリとデバイス上のユーザ毎に異なる値を有しています。デバイススコープの識別子を必要とする開発者は、代わりに、広告IDなどのリセット可能な識別子を使用して、ユーザーにコントロールを与えてください。広告IDは、広告トラッキングを制限するためのユーザ向きの設定も提供します。 AndroidのOでさらに

  • ANDROID_ID値は、パッケージ名と署名キーとして 限り、再インストール/アンインストールパッケージには変更されませんが同じです。アプリはこの値に を依存させて、再インストールの間の状態を維持することができます。
  • アプリが以前のバージョンの Androidを搭載する端末にインストールされている場合、アプリがアンインストールされていない限り、 が再インストールされない限り、端末が がAndroid OにアップデートされたときのAndroid IDは同じです。
  • Android IDの値は、デバイスが工場出荷時に にリセットされている場合、またはアンインストールと
    イベントの再インストールの間に署名キーが回転した場合にのみ変更されます。
  • この変更は、Google Playサービスと広告IDで出荷される端末メーカー にのみ必要です。他の デバイスメーカは、別のリセット可能な IDを提供するか、アンドロイドIDを提供し続けることができます。
関連する問題