私はこの呼び出しを使用しています:
Secure.getString(getApplicationContext().getContentResolver(), Secure.Android_ID);
デバイスのUIDを取得します。ただし、複数のデバイスから同じIDを取得していると思います。これは可能でしょうか?
問題のIDは9774d56d682e549cであり、このIDを返すいくつかのデバイスに問題があるようです http://code.google.com/p/Android/issues/list?cursor=10603&updated=10603&ts=12959934 =
Android Oを使用すると、Android_IDの動作が変わります。 Android_IDは、電話のユーザーごとにアプリごとに異なります。
から取得: https://Android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html
Android ID
Oでは、Android ID(Settings.Secure.Android_IDまたはSSAID)には、デバイス上のアプリごとおよびユーザーごとに異なる値があります。デバイススコープの識別子を必要とする開発者は、代わりに広告IDなどのリセット可能な識別子を使用して、ユーザーにより多くの制御を与える必要があります。広告IDには、広告追跡を制限するためのユーザー向け設定も用意されています。
さらにAndroid Oで:
したがって、デバイス自体に固有の何かが必要な場合は、TM.getDeviceId()
shouldで十分です。
以下は、テレフォニーマネージャーIDを取得する方法を示すコードです。 Android使用しているデバイスIDは、工場出荷時の設定で変更できます。また、一部のメーカーは一意のIDを指定する際に問題があります。
TelephonyManager tm =
(TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String androidId = Secure.getString(this.getContentResolver(), Secure.Android_ID);
Log.d("ID", "Android ID: " + androidId);
Log.d("ID", "Device ID : " + tm.getDeviceId());
を使用して、TelephonyManager
の権限を必ず取得してください。
<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
私はこれについていくつかのことを読みましたが、残念ながら、個々のデバイスを一意に識別するためにAndroid_IDに依存するべきではありません。
Androidコンプライアンス要件では強制されていないようです。そのため、メーカーは、「モデル」IDなどとして使用するものを含め、選択した方法で実装しているようです。
また、メーカーが(たとえば)UUIDにするためにジェネレーターを作成した場合でも、工場出荷時のリセットに耐えることは保証されないことに注意してください。
ここに別のソリューション、広告IDをリストしてください:
https://support.google.com/googleplay/Android-developer/answer/6048248?hl=en
上記のリンクからコピー:
広告IDは、Google Play開発者サービスによって提供される、広告用のユーザーがリセット可能な一意のIDです。ユーザーにより良いコントロールを提供し、開発者にアプリの収益化を継続するためのシンプルで標準的なシステムを提供します。ユーザーは、Google Playアプリ内で識別子をリセットしたり、パーソナライズされた広告(以前はインタレストベース広告と呼ばれていました)をオプトアウトしたりできます。
制限は次のとおりです。
https://support.google.com/googleplay/Android-developer/answer/113469?hl=en&rd=1#privacy
//Fields
String myID;
int myversion = 0;
myversion = Integer.valueOf(Android.os.Build.VERSION.SDK);
if (myversion < 23) {
TelephonyManager mngr = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
myID= mngr.getDeviceId();
}
else
{
myID =
Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.Android_ID);
}
はい、Secure.Android_IDはデバイスごとに一意です。