ตัวอย่างนี้สาธิตวิธี ดึง Android ID (SSAID) ซึ่งเป็นตัวระบุอุปกรณ์ที่ไม่เปลี่ยนแปลงจนกว่าจะ Factory Reset และวิธีเก็บไว้ใช้งาน
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
Android Studio → New Project → Empty Activity
ขั้นตอนที่ 2: Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="Device ID Demo"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvDeviceId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textColor="@android:color/holo_purple"
android:textSize="18sp"
android:textStyle="bold"
android:padding="16dp" />
</RelativeLayout>
ขั้นตอนที่ 3: โค้ดหลัก (MainActivity.kt)
import android.os.Bundle
import android.provider.Settings.Secure
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "Device ID Demo"
val tvDeviceId = findViewById(R.id.tvDeviceId)
// 🔑 ดึง Android ID (SSAID) - คงที่ต่ออุปกรณ์ จนกว่า Factory Reset
val androidId = Secure.getString(contentResolver, Secure.ANDROID_ID)
tvDeviceId.text = "Device ID (Android ID):\n$androidId"
// 💾 ตัวอย่าง: เก็บลง SharedPreferences
// saveDeviceId(androidId)
}
private fun saveDeviceId(id: String?) {
getSharedPreferences("device_prefs", MODE_PRIVATE)
.edit()
.putString("android_id", id ?: "")
.apply()
}
private fun getSavedDeviceId(): String? {
return getSharedPreferences("device_prefs", MODE_PRIVATE)
.getString("android_id", null)
}
}
⚠️ ข้อควรทราบเกี่ยวกับ Device Identifier
| Identifier | คุณสมบัติ | เหมาะสำหรับ |
|---|---|---|
| Settings.Secure.ANDROID_ID | คงที่ต่ออุปกรณ์/ผู้ใช้ เปลี่ยนหลัง Factory Reset | Analytics, Fraud detection, Preferences |
| IMEI/MEID (ต้อง Permission) | Hardware ID เปลี่ยนไม่ได้ แต่จำกัดสิทธิ์เข้าถึง (Android 10+) | Telephony, Carrier services |
| Advertising ID (GAID) | ผู้ใช้รีเซ็ตได้ ใช้สำหรับโฆษณา | Ads, Tracking (ต้องมี Consent) |
| Firebase Installation ID (FID) | ต่อ App Instance เปลี่ยนได้เมื่อ Reinstall | FCM, Firebase Analytics |
📋 Best Practices
- ✅ ใช้ Android ID สำหรับระบุอุปกรณ์ทั่วไป
- ✅ เก็บใน SharedPreferences หรือ EncryptedSharedPreferences
- ❌ อย่าใช้ IMEI/Serial แล้ว (Deprecated/Restricted)
- ❌ อย่าส่ง Device ID ไป Server โดยไม่เข้ารหัส/ได้รับ Consent
- 🔒 พิจารณาใช้ KeyStore สร้าง Key Pair แทนสำหรับ Auth
AndroidManifest.xml
ไม่ต้องเพิ่ม Permission สำหรับ ANDROID_ID
ทดสอบ
รันแอป → จะแสดง Android ID 64-bit hex string (เช่น a1b2c3d4e5f67890)