アプリケーションのインストールの追跡

Android専用のGoogleグループでは、Androidデバイス用の一意で信頼性が高く安定した識別子を見つけることは困難であるという開発者の苦情がときどきあります。

android-developersブログには、個々のアプリケーションのインストールを追跡する方法に関する小さなトピックが掲載されています。 誰かに役立つと思います。





インストールの追跡



開発者がアプリケーションの個々のインストールを追跡したい理由はたくさんあります。 TelephonyManager.getDeviceId()メソッドを呼び出し、この値を使用して個々のインストールを識別するものもあります。 これにはいくつかの問題があります。まず、IDの一意性は保証されません。 第二に、これが機能する場合でも、値はいわゆる「工場出荷時設定へのリセット」(すべての設定を初期設定にリセットする)を乗り切ることができます。その誰か。



設定を追跡するには、 UUIDを識別子として使用し、アプリケーションを初めて起動するたびに新しいUUIDを作成します。 以下は、1つの静的Installation.idメソッド(コンテキストコンテキスト)を持つInstallationクラスのスケッチです。 その後、すべてはあなたの想像力に依存します-さまざまなデバイス固有の情報をINSTALLATIONファイルに追加できます。



public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } }
      
      







デバイス識別



個々のデバイスに一意の識別子が必要だと想像してください。 いずれにしても、このタスクは簡単ではありません。



以前は、すべてのAndroidデバイスが電話の場合、すべてがシンプルでした。TelephonyManager.getDeviceId()メソッドは、一意であることが保証された電話のIMEIMEID 、またはESNを返しました。

ただし、このアプローチでは多くの問題が発生します。



Macアドレス



BluetoothまたはWi-Fiを搭載したデバイスのMACアドレスを返してみることができます。 第一に、すべてのデバイスがWi-Fiを備えているわけではないため、これもお勧めしません。 次に、Wi-Fiモジュールがオンになっていない場合、MACアドレスを取得できません。



シリアル番号



Android 2.3(Gingerbread)から、 android.os.Build.SERIALを通じてシリアル番号を取得できます。 2.3より前のバージョンの場合、 lopatoidコメントでメソッドを説明しました。



ANDROID_ID



より正確には、 Settings.Secure.ANDROID_IDです。 これは、デバイスの初回起動時に生成される64ビット値であり、デバイスのクリーニング時にリセットされます(ファクトリリセットなど)



基本的に、ANDROID_IDはデバイスの識別に適しています。 ただし、いくつかの欠点があります。まず、Androidバージョン2.2(Froyo)では100%信頼性がありません。 次に、電話メーカーの1つのよく知られたバグがあります。これは、すべてのデバイスに対して同じANDROID_IDが生成されたためです。



おわりに



ほとんどのアプリケーションでは、主なことはデバイスではなく単一のインストールを一意に識別することです。 幸いなことに、これは難しくありません。



個々のデバイスを識別することを避ける多くの理由があります。 まだ試してみたい人にとっては、おそらく最良の選択はANDROID_IDで、レガシーデバイス用の小さなヒューリスティックです。



All Articles