Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีดึงและเก็บ Device ID ใน Android ด้วย Kotlin

ตัวอย่างนี้สาธิตวิธี ดึง 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)