web-dev-qa-db-ja.com

Secure.Android_IDは各デバイスで一意ですか?

私はこの呼び出しを使用しています:

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 =

64
FoamyGuy

これを確認してください thread ,.ただし、「工場出荷時のリセット時に変更可能」と記載されているため、注意が必要です。ご自身の責任で使用してください。根ざした電話で簡単に変更できます。また、一部のメーカーは、電話番号が重複しているという問題を抱えているようです thread 。あなたが何をしようとしているかにもよりますが、私はおそらくこれをUIDとして使用しません。

34
ninjasense

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で:

  • パッケージ名と署名キーが同じである限り、パッケージのアンインストール/再インストール時にAndroid_ID値は変更されません。アプリはこの値に依存して、再インストール後も状態を維持できます。
  • 以前のバージョンのAndroidを実行しているデバイスにアプリをインストールした場合、アプリをアンインストールして再インストールしない限り、Android IDはデバイスをAndroid Oに更新しても同じままです。
  • Android ID値は、デバイスが工場出荷時の状態にリセットされた場合、または署名キーがアンインストールと
    イベントを再インストールします。
  • この変更は、Google Play開発者サービスと広告IDで出荷するデバイスメーカーにのみ必要です。他のデバイスの製造元は、代替のリセット可能なIDを提供するか、Android IDの提供を続けます。
25
userM1433372

したがって、デバイス自体に固有の何かが必要な場合は、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" />
15

私はこれについていくつかのことを読みましたが、残念ながら、個々のデバイスを一意に識別するためにAndroid_IDに依存するべきではありません。

Androidコンプライアンス要件では強制されていないようです。そのため、メーカーは、「モデル」IDなどとして使用するものを含め、選択した方法で実装しているようです。

また、メーカーが(たとえば)UUIDにするためにジェネレーターを作成した場合でも、工場出荷時のリセットに耐えることは保証されないことに注意してください。

6
Squonk

ここに別のソリューション、広告IDをリストしてください:

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

上記のリンクからコピー:

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

制限は次のとおりです。

  1. Google Play対応デバイスのみ。
  2. 個人情報保護方針: https://support.google.com/googleplay/Android-developer/answer/113469?hl=en&rd=1#privacy
1
semicircle21
//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はデバイスごとに一意です。

0
boraberka