Android で UUID を取得する方法

はじめに

AndroidでUUID(Universally Unique Identifier)を取得する方法を紹介します。
ログインしていないユーザーの識別にUUIDを使用するケースがよくありますよね。
ユニークなIDを取得するにはさまざまな方法があったりしますが、結局どれ使えばいいのか迷ったのでまとめておきます。

推奨

結論から言うと、UUIDを取得してSharedPreferencesに保存して使うのが一番多いような気がしています。
大半のユースケースではこれで対応できると公式ドキュメントにも記載がありました。

developer.android.com

UUIDを生成してSharedPreferenceに保存する実装

UUIDを乱数で発行して、SharedPreferencesに保存しておくという実装です。
一度生成している場合は、2度目以降はすでに作成済みのUUIDを取得するようにしています。
SharedPreferencesを使用しているので、アプリをアンインストールされてしまうとUUIDも破棄されてしまいます。

/**
 * アプリの設定保持クラス
 *
 * @param context Context
 */
class AppConfig(context: Context) {

    companion object {

        /**
         * ファイル名
         */
        private const val FILE_NAME = "${BuildConfig.APPLICATION_ID}.config"
    }

    /**
     * SharedPreferences
     */
    private val sharedPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE)

    /**
     * UUID
     */
    val uuid: String
        get() {
            return if (sharedPreferences.contains(Key.UUID.name)) {
                val uuid = sharedPreferences.getString(Key.UUID.name, null)
                check(!uuid.isNullOrEmpty()) { "UUID is not found." }
                uuid
            } else {
                val uuid = UUID.randomUUID().toString()
                sharedPreferences.edit().putString(Key.UUID.name, uuid).apply()
                uuid
            }
        }


    /**
     * SharedPreferencesのキー名を定義
     */
    private enum class Key {

        /**
         * UUID
         */
        UUID
    }
}

補足

その他にも、広告ID、Android ID、デバイスIDなど様々なデータを取得することができます。
ですが、パーミッションが必要だったり、ユニーク性が低かったりとどれも要件を満たすものは少ない印象です。
他のIDについても知りたいという方はこちらを参考にしてください。

iridge.jp

Android O からはAndroid IDの取得方法が変更されたようです。

developers-jp.googleblog.com

その他の識別子を取得するコードについてはこちらがよくまとまっていました。

i53.hatenablog.jp