แนวทางปฏิบัติที่ดีที่สุดสำหรับตัวระบุที่ไม่ซ้ำกัน

เอกสารนี้จะให้คำแนะนำในการเลือกตัวระบุที่เหมาะสมสำหรับแอปตามกรณีการใช้งานของคุณ

ดูข้อมูลทั่วไปเกี่ยวกับสิทธิ์ของ Android ได้ที่ภาพรวมของสิทธิ์ ดูแนวทางปฏิบัติแนะนำที่เฉพาะเจาะจงสำหรับการทำงานกับสิทธิ์ของ Android ได้ที่แนวทางปฏิบัติแนะนำสำหรับสิทธิ์ของแอป

แนวทางปฏิบัติแนะนำในการทำงานกับตัวระบุ Android

เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ ให้ใช้ตัวระบุที่มีข้อจำกัดมากที่สุดซึ่งตรงกับ Use Case ของแอป โดยเฉพาะอย่างยิ่ง โปรดทำตามแนวทางปฏิบัติแนะนำต่อไปนี้

  1. เลือกตัวระบุที่ผู้ใช้รีเซ็ตได้ทุกครั้งที่เป็นไปได้ แอปของคุณสามารถบรรลุ Use Case ส่วนใหญ่ได้แม้ว่าจะใช้ตัวระบุอื่นๆ ที่ไม่ใช่รหัสฮาร์ดแวร์ที่รีเซ็ตไม่ได้
  2. หลีกเลี่ยงการใช้ตัวระบุฮาร์ดแวร์ ในกรณีการใช้งานส่วนใหญ่ คุณสามารถหลีกเลี่ยงการใช้ตัวระบุฮาร์ดแวร์ เช่น International Mobile Equipment Identity (IMEI) ได้โดยไม่จำกัดฟังก์ชันการทำงานที่จำเป็น

    Android 10 (ระดับ API 29) เพิ่มข้อจำกัดสำหรับตัวระบุที่รีเซ็ตไม่ได้ ซึ่งรวมถึงทั้ง IMEI และหมายเลขซีเรียล แอปของคุณต้องเป็นแอปเจ้าของอุปกรณ์หรือโปรไฟล์ มีสิทธิ์พิเศษของผู้ให้บริการ หรือมีสิทธิ์พิเศษ READ_PRIVILEGED_PHONE_STATE เพื่อเข้าถึงตัวระบุเหล่านี้

  3. ใช้รหัสโฆษณาสำหรับการทำโปรไฟล์ผู้ใช้หรือ Use Case ของโฆษณาเท่านั้น เมื่อใช้รหัสโฆษณา ให้เคารพการตัดสินใจของผู้ใช้เกี่ยวกับการติดตามโฆษณาเสมอ หากคุณต้องเชื่อมโยงตัวระบุโฆษณากับข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ ให้ดำเนินการต่อเมื่อได้รับความยินยอมอย่างชัดแจ้งจากผู้ใช้เท่านั้น

  4. อย่าเชื่อมโยงการรีเซ็ตรหัสโฆษณา

  5. ใช้รหัสการติดตั้ง Firebase (FID) หรือ GUID ที่จัดเก็บแบบส่วนตัวเมื่อเป็นไปได้สำหรับ Use Case อื่นๆ ทั้งหมด ยกเว้นการป้องกันการประพฤติมิชอบด้านการชำระเงินและโทรศัพท์ สำหรับ Use Case ที่ไม่ใช่โฆษณาส่วนใหญ่ FID หรือ GUID ควรเพียงพอแล้ว

  6. ใช้ API ที่เหมาะสมกับกรณีการใช้งานของคุณเพื่อลดความเสี่ยงด้านความเป็นส่วนตัว ใช้ DRM API สำหรับการปกป้องเนื้อหาที่มีมูลค่าสูง และใช้ Play Integrity API สำหรับการป้องกันการละเมิด Play Integrity API เป็นวิธีที่ง่ายที่สุดในการระบุว่าอุปกรณ์เป็นของแท้หรือไม่โดยไม่ก่อให้เกิดความเสี่ยงด้านความเป็นส่วนตัว

ส่วนที่เหลือของคู่มือนี้จะอธิบายกฎเหล่านี้อย่างละเอียดในบริบทของการพัฒนาแอป Android

ทำงานกับรหัสโฆษณา

รหัสโฆษณาเป็นตัวระบุที่ผู้ใช้รีเซ็ตได้และเหมาะสำหรับกรณีการใช้งานโฆษณา อย่างไรก็ตาม มีประเด็นสำคัญบางประการที่ควรคำนึงถึงเมื่อใช้รหัสนี้

เคารพความตั้งใจของผู้ใช้ในการรีเซ็ตรหัสโฆษณาเสมอ อย่าเชื่อมโยงการรีเซ็ตของผู้ใช้โดยใช้ตัวระบุหรือลายนิ้วมืออื่นเพื่อลิงก์รหัสโฆษณาที่ตามมาเข้าด้วยกันโดยไม่ได้รับความยินยอมจากผู้ใช้ นโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play ระบุไว้ดังนี้

"...หากมีการรีเซ็ต ตัวระบุโฆษณาใหม่ต้องไม่เชื่อมโยงกับตัวระบุโฆษณาก่อนหน้านี้ หรือข้อมูลที่ได้มาจากตัวระบุโฆษณาก่อนหน้านี้หากไม่ได้รับการยินยอมอย่างชัดแจ้งจากผู้ใช้"

ปฏิบัติตามแฟล็กโฆษณาที่ปรับตามโปรไฟล์ของผู้ใช้ที่เชื่อมโยงอยู่เสมอ รหัสโฆษณาสามารถกำหนดค่าได้โดยที่ผู้ใช้สามารถจำกัดปริมาณการติดตามที่เชื่อมโยงกับรหัสดังกล่าว ใช้เมธอด AdvertisingIdClient.Info.isLimitAdTrackingEnabled() เสมอเพื่อให้แน่ใจว่าคุณไม่ได้ละเมิดความต้องการของผู้ใช้ นโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play ระบุไว้ดังนี้

"...คุณต้องปฏิบัติตามการตั้งค่า 'เลือกไม่ใช้การโฆษณาตามความสนใจ' หรือ 'เลือกไม่ใช้การปรับโฆษณาตามโปรไฟล์ของผู้ใช้' ของผู้ใช้ หากผู้ใช้เปิดใช้การตั้งค่านี้ คุณจะไม่สามารถใช้ตัวระบุโฆษณาสำหรับการสร้างโปรไฟล์ผู้ใช้โดยมีจุดประสงค์เพื่อโฆษณา หรือเพื่อกำหนดเป้าหมายผู้ใช้ด้วยโฆษณาที่ปรับตามโปรไฟล์ของผู้ใช้ กิจกรรมที่อนุญาตประกอบด้วยการโฆษณาตามบริบท, การกำหนดความถี่สูงสุด, เครื่องมือวัด Conversion, การรายงาน และการตรวจหาเกี่ยวกับความปลอดภัยและการฉ้อโกง"

โปรดคำนึงถึงนโยบายความเป็นส่วนตัวหรือความปลอดภัยที่เกี่ยวข้องกับ SDK ที่คุณใช้ซึ่งเกี่ยวข้องกับการใช้รหัสโฆษณา ตัวอย่างเช่น หากคุณส่ง true ไปยังเมธอด enableAdvertisingIdCollection() จาก SDK ของ Google Analytics โปรดตรวจสอบและปฏิบัติตามนโยบาย Analytics SDK ที่เกี่ยวข้องทั้งหมด

นอกจากนี้ โปรดทราบว่านโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play กำหนดว่ารหัสโฆษณา "ต้องไม่เชื่อมโยงกับข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ หรือเชื่อมโยงกับตัวระบุอุปกรณ์ถาวร (เช่น SSAID, ที่อยู่ MAC, IMEI ฯลฯ)"

ตัวอย่างเช่น สมมติว่าคุณต้องการรวบรวมข้อมูลเพื่อสร้างตารางฐานข้อมูลที่มีคอลัมน์ต่อไปนี้

TABLE-01
timestamp ad_id account_id clickid
TABLE-02
account_id name dob country

ในตัวอย่างนี้ คอลัมน์ ad_id สามารถรวมเข้ากับ PII ผ่านคอลัมน์ account_id ในทั้ง 2 ตาราง ซึ่งจะเป็นการละเมิดนโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play หากคุณไม่ได้รับสิทธิ์อย่างชัดแจ้งจากผู้ใช้

โปรดทราบว่าความเชื่อมโยงระหว่างรหัสผู้ลงโฆษณากับ PII อาจไม่ชัดเจนเช่นนี้เสมอไป อาจมี "ตัวระบุเสมือน" ที่ปรากฏทั้งในตารางที่ใช้ PII และรหัสโฆษณาเป็นคีย์ ซึ่งทำให้เกิดปัญหาได้เช่นกัน ตัวอย่างเช่น สมมติว่าเราเปลี่ยน TABLE-01 และ TABLE-02 ดังนี้

TABLE-01
timestamp ad_id clickid dev_model
TABLE-02
timestamp demo account_id dev_model name

ในกรณีนี้ หากมีกิจกรรมการคลิกที่เกิดขึ้นไม่บ่อยนัก ก็ยังคงเป็นไปได้ที่จะรวม TABLE-01 ของรหัสผู้ลงโฆษณาและ PII ที่มีอยู่ใน TABLE-02 โดยใช้การประทับเวลาของกิจกรรมและรุ่นอุปกรณ์

แม้ว่าการรับประกันว่าจะไม่มีตัวระบุเสมือนดังกล่าวอยู่ในชุดข้อมูลมักเป็นเรื่องยาก แต่คุณสามารถป้องกันความเสี่ยงในการรวมที่ชัดเจนที่สุดได้โดยการทำให้ข้อมูลที่ไม่ซ้ำกันเป็นข้อมูลทั่วไปเมื่อเป็นไปได้ ในตัวอย่างก่อนหน้านี้ หมายความว่าการลดความแม่นยำของการประทับเวลาเพื่อให้อุปกรณ์หลายเครื่องที่มีรุ่นเดียวกันปรากฏขึ้นสำหรับการประทับเวลาทุกครั้ง

วิธีแก้ปัญหาอื่นๆ มีดังนี้

  • ไม่ออกแบบตารางที่ลิงก์ PII กับรหัสโฆษณาอย่างชัดเจน ในตัวอย่างแรกด้านบน หมายความว่าไม่รวมคอลัมน์ account_id ใน TABLE-01

  • การแยกและตรวจสอบรายการควบคุมการเข้าถึงสำหรับผู้ใช้หรือบทบาทที่มีสิทธิ์เข้าถึงทั้งข้อมูลที่ใช้รหัสโฆษณาเป็นคีย์และ PII การควบคุมและตรวจสอบความสามารถในการเข้าถึงทั้ง 2 แหล่งข้อมูลพร้อมกันอย่างเข้มงวด (เช่น การรวมตาราง) จะช่วยลดความเสี่ยงในการเชื่อมโยงระหว่างรหัสโฆษณากับ PII โดยทั่วไปแล้ว การควบคุมการเข้าถึงหมายถึงการดำเนินการต่อไปนี้

    1. เก็บรายการควบคุมการเข้าถึง (ACL) สำหรับข้อมูลที่ใช้รหัสผู้ลงโฆษณาเป็นคีย์และ PII แยกกันเพื่อลดจำนวนบุคคลหรือบทบาทที่อยู่ใน ACL ทั้ง 2 รายการ
    2. ใช้การบันทึกและการตรวจสอบการเข้าถึงเพื่อตรวจหาและจัดการข้อยกเว้นของกฎนี้

ดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับรหัสโฆษณาอย่างมีความรับผิดชอบได้ที่เอกสารอ้างอิง API AdvertisingIdClient

การทำงานกับ FID และ GUID

วิธีที่ตรงไปตรงมาที่สุดในการระบุอินสแตนซ์แอปที่ทำงานบนอุปกรณ์คือการใช้รหัสการติดตั้ง Firebase (FID) และนี่เป็นวิธีที่แนะนำในกรณีการใช้งานส่วนใหญ่ที่ไม่ใช่โฆษณา มีเพียงอินสแตนซ์แอปที่จัดสรรไว้เท่านั้นที่เข้าถึงตัวระบุนี้ได้ และสามารถรีเซ็ตได้ (ค่อนข้าง) ง่ายเนื่องจากจะคงอยู่ตราบเท่าที่แอปยังติดตั้งอยู่เท่านั้น

ด้วยเหตุนี้ FID จึงให้คุณสมบัติด้านความเป็นส่วนตัวที่ดีกว่าเมื่อเทียบกับรหัสฮาร์ดแวร์ที่กำหนดขอบเขตระดับอุปกรณ์ซึ่งรีเซ็ตไม่ได้ ดูข้อมูลเพิ่มเติมได้ที่เอกสารอ้างอิง API ของ firebase.installations

ในกรณีที่ FID ไม่เหมาะสม คุณยังสามารถใช้รหัสที่ไม่ซ้ำกันทั่วโลก (GUID) ที่กำหนดเองเพื่อระบุอินสแตนซ์ของแอปที่ไม่ซ้ำกันได้ วิธีที่ง่ายที่สุดในการดำเนินการคือการสร้าง GUID ของคุณเองโดยใช้โค้ดต่อไปนี้

Kotlin

var uniqueID = UUID.randomUUID().toString()

Java

String uniqueID = UUID.randomUUID().toString();

เนื่องจากตัวระบุไม่ซ้ำกันทั่วโลก จึงใช้เพื่อระบุอินสแตนซ์แอปที่เฉพาะเจาะจงได้ เพื่อหลีกเลี่ยงข้อกังวลเกี่ยวกับการลิงก์ตัวระบุในแอปต่างๆ ให้จัดเก็บ GUID ในที่จัดเก็บข้อมูลภายในแทนที่จัดเก็บข้อมูลภายนอก (ที่ใช้ร่วมกัน) ดูข้อมูลเพิ่มเติมได้ที่หน้าภาพรวมพื้นที่เก็บข้อมูลและไฟล์

ไม่ทำงานกับที่อยู่ MAC

ที่อยู่ MAC เป็นค่าที่ไม่ซ้ำกับอุปกรณ์อื่นใดทั่วโลก ผู้ใช้รีเซ็ตไม่ได้ และจะยังคงอยู่แม้จะรีเซ็ตเป็นค่าเริ่มต้น ด้วยเหตุผลเหล่านี้ เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ ใน Android เวอร์ชัน 6 ขึ้นไป การเข้าถึงที่อยู่ MAC จะจำกัดไว้เฉพาะแอประบบเท่านั้น แอปของบุคคลที่สามจะเข้าถึงข้อมูลดังกล่าวไม่ได้

การเปลี่ยนแปลงความพร้อมใช้งานของที่อยู่ MAC ใน Android 11

ในแอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไป การสุ่ม MAC สำหรับเครือข่าย Passpoint จะเป็นไปตามโปรไฟล์ Passpoint โดยจะสร้างที่อยู่ MAC ที่ไม่ซ้ำกันตามช่องต่อไปนี้

  • ชื่อโดเมนที่สมบูรณ์ในตัวเอง (FQDN)
  • Realm
  • ข้อมูลเข้าสู่ระบบ โดยอิงตามข้อมูลเข้าสู่ระบบที่ใช้ในโปรไฟล์ Passpoint ดังนี้
    • ข้อมูลเข้าสู่ระบบของผู้ใช้: ชื่อผู้ใช้
    • ข้อมูลเข้าสู่ระบบของใบรับรอง: ใบรับรองและประเภทใบรับรอง
    • ข้อมูลเข้าสู่ระบบของซิม: ประเภท EAP และ IMSI

นอกจากนี้ แอปที่ไม่มีสิทธิ์จะไม่สามารถเข้าถึงที่อยู่ MAC ของอุปกรณ์ได้ โดยจะมองเห็นเฉพาะอินเทอร์เฟซเครือข่ายที่มีที่อยู่ IP เท่านั้น ซึ่งจะส่งผลต่อเมธอด getifaddrs() และ NetworkInterface.getHardwareAddress() รวมถึงการส่งข้อความ RTM_GETLINK Netlink

รายการต่อไปนี้คือวิธีที่แอปได้รับผลกระทบจากการเปลี่ยนแปลงนี้

  • NetworkInterface.getHardwareAddress() จะแสดงผลเป็น Null สำหรับทุกอินเทอร์เฟซ
  • แอปไม่สามารถใช้ฟังก์ชัน bind() ในซ็อกเก็ต NETLINK_ROUTE
  • คำสั่ง ip จะไม่แสดงข้อมูลเกี่ยวกับอินเทอร์เฟซ
  • แอปส่งข้อความ RTM_GETLINK ไม่ได้

โปรดทราบว่านักพัฒนาแอปส่วนใหญ่ควรใช้ API ระดับสูงกว่าของ ConnectivityManager แทน API ระดับต่ำกว่า เช่น NetworkInterface, getifaddrs() หรือซ็อกเก็ต Netlink ตัวอย่างเช่น แอปที่ต้องการข้อมูลล่าสุดเกี่ยวกับเส้นทางปัจจุบันจะรับข้อมูลนี้ได้โดยการฟังการเปลี่ยนแปลงเครือข่ายโดยใช้ ConnectivityManager.registerNetworkCallback() และเรียกใช้ LinkProperties.getRoutes() ที่เชื่อมโยงกับเครือข่าย

ลักษณะของตัวระบุ

ระบบปฏิบัติการ Android มีรหัสจำนวนมากที่มีลักษณะการทำงานแตกต่างกัน รหัสที่คุณควรใช้ขึ้นอยู่กับว่าลักษณะต่อไปนี้ทำงานร่วมกับกรณีการใช้งานของคุณอย่างไร อย่างไรก็ตาม ลักษณะเหล่านี้ยังส่งผลต่อความเป็นส่วนตัวด้วย คุณจึงควรทำความเข้าใจว่าลักษณะเหล่านี้โต้ตอบกันอย่างไร

ขอบเขต

ขอบเขตของตัวระบุจะอธิบายว่าระบบใดเข้าถึงตัวระบุได้ โดยทั่วไปแล้ว ขอบเขตของตัวระบุ Android จะมี 3 รูปแบบ ได้แก่

  • แอปเดียว: รหัสเป็นข้อมูลภายในแอปและแอปอื่นๆ เข้าถึงไม่ได้
  • กลุ่มแอป: กลุ่มแอปที่เกี่ยวข้องซึ่งกำหนดไว้ล่วงหน้าจะเข้าถึงรหัสได้
  • อุปกรณ์: แอปทั้งหมดที่ติดตั้งในอุปกรณ์จะเข้าถึงรหัสได้

ยิ่งขอบเขตที่ให้แก่ตัวระบุกว้างเท่าใด ความเสี่ยงที่จะมีการใช้ตัวระบุเพื่อวัตถุประสงค์ในการติดตามก็จะยิ่งมากขึ้นเท่านั้น ในทางกลับกัน หากมีเพียงอินสแตนซ์แอปเดียวที่เข้าถึงตัวระบุได้ ก็จะใช้ตัวระบุดังกล่าวเพื่อติดตามอุปกรณ์ในธุรกรรมต่างๆ ในแอปอื่นไม่ได้

ความสามารถในการรีเซ็ตและความคงอยู่

ความสามารถในการรีเซ็ตและความคงอยู่จะกำหนดอายุการใช้งานของตัวระบุและอธิบายวิธีรีเซ็ตตัวระบุ ทริกเกอร์การรีเซ็ตที่พบบ่อย ได้แก่ การรีเซ็ตในแอป การรีเซ็ตผ่านการตั้งค่าระบบ การรีเซ็ตเมื่อเปิดแอป และการรีเซ็ตเมื่อติดตั้ง ตัวระบุ Android อาจมีอายุการใช้งานที่แตกต่างกัน แต่โดยปกติแล้วอายุการใช้งานจะเกี่ยวข้องกับวิธีรีเซ็ตรหัส ดังนี้

  • เฉพาะเซสชัน: ระบบจะใช้รหัสใหม่ทุกครั้งที่ผู้ใช้รีสตาร์ทแอป
  • รีเซ็ตเมื่อติดตั้ง: ระบบจะใช้รหัสใหม่ทุกครั้งที่ผู้ใช้ถอนการติดตั้งและติดตั้งแอปอีกครั้ง
  • รีเซ็ต FDR: ระบบจะใช้รหัสใหม่ทุกครั้งที่ผู้ใช้รีเซ็ตอุปกรณ์เป็นค่าเริ่มต้น
  • FDR-persistent: รหัสจะยังคงอยู่แม้จะรีเซ็ตเป็นค่าเริ่มต้น

ความสามารถในการรีเซ็ตช่วยให้ผู้ใช้สร้างรหัสใหม่ที่ไม่เชื่อมโยงกับข้อมูลโปรไฟล์ที่มีอยู่ได้ ยิ่งตัวระบุคงอยู่นานและเชื่อถือได้มากเท่าใด เช่น ตัวระบุที่คงอยู่แม้จะรีเซ็ตเป็นค่าเริ่มต้นแล้วก็ตาม ความเสี่ยงที่ผู้ใช้อาจถูกติดตามในระยะยาวก็จะยิ่งมากขึ้นเท่านั้น หากมีการรีเซ็ตตัวระบุเมื่อติดตั้งแอปอีกครั้ง จะช่วยลดความคงอยู่และเป็นวิธีรีเซ็ตตัวระบุ แม้ว่าจะไม่มีการควบคุมของผู้ใช้อย่างชัดแจ้งในการรีเซ็ตจากภายในแอปหรือการตั้งค่าระบบก็ตาม

ความเป็นเอกลักษณ์

ความไม่ซ้ำกันจะกำหนดแนวโน้มของการทับซ้อนกัน กล่าวคือ มีตัวระบุที่เหมือนกันอยู่ภายในขอบเขตที่เกี่ยวข้อง ในระดับสูงสุด ตัวระบุที่ไม่ซ้ำกันทั่วโลกจะไม่มีการชนกันเลย แม้แต่ในอุปกรณ์หรือแอปอื่นๆ มิฉะนั้น ระดับความไม่ซ้ำกันจะขึ้นอยู่กับเอนโทรปีของตัวระบุและแหล่งที่มาของความสุ่มที่ใช้สร้างตัวระบุ ตัวอย่างเช่น โอกาสที่จะเกิดการทับซ้อนกันจะสูงกว่ามากสำหรับตัวระบุแบบสุ่มที่สร้างขึ้นโดยใช้วันที่ติดตั้งตามปฏิทิน (เช่น 2019-03-01) เมื่อเทียบกับตัวระบุที่สร้างขึ้นโดยใช้การประทับเวลา Unix ของการติดตั้ง (เช่น 1551414181)

โดยทั่วไปแล้ว ตัวระบุบัญชีผู้ใช้จะถือว่าไม่ซ้ำกัน กล่าวคือ อุปกรณ์/บัญชีแต่ละชุดจะมีรหัสที่ไม่ซ้ำกัน ในทางกลับกัน ยิ่งตัวระบุมีความเฉพาะเจาะจงน้อยลงในกลุ่มประชากร การคุ้มครองความเป็นส่วนตัวก็จะยิ่งมากขึ้น เนื่องจากตัวระบุจะมีประโยชน์น้อยลงในการติดตามผู้ใช้แต่ละราย

การปกป้องความสมบูรณ์และการไม่ปฏิเสธความรับผิด

คุณสามารถใช้ตัวระบุที่ยากต่อการปลอมแปลงหรือเล่นซ้ำเพื่อพิสูจน์ว่าอุปกรณ์หรือบัญชีที่เชื่อมโยงมีคุณสมบัติบางอย่าง เช่น คุณสามารถพิสูจน์ได้ว่าอุปกรณ์ไม่ใช่อุปกรณ์เสมือนจริงที่นักส่งสแปมใช้ ตัวระบุที่ปลอมแปลงได้ยากยังให้การไม่ปฏิเสธความรับผิดด้วย หากอุปกรณ์ลงนามข้อความด้วยคีย์ลับ ก็ยากที่จะอ้างว่าอุปกรณ์ของผู้อื่นเป็นผู้ส่งข้อความ การไม่สามารถปฏิเสธความรับผิดอาจเป็นสิ่งที่ผู้ใช้ต้องการ เช่น เมื่อตรวจสอบสิทธิ์การชำระเงิน หรืออาจเป็นคุณสมบัติที่ไม่พึงประสงค์ เช่น เมื่อส่งข้อความที่ตนเองรู้สึกเสียใจในภายหลัง

กรณีการใช้งานทั่วไปและตัวระบุที่เหมาะสมที่จะใช้

ส่วนนี้จะอธิบายทางเลือกอื่นนอกเหนือจากการใช้รหัสฮาร์ดแวร์ เช่น IMEI เราไม่แนะนำให้ใช้รหัสฮาร์ดแวร์เนื่องจากผู้ใช้รีเซ็ตไม่ได้ และรหัสจะกำหนดขอบเขตไว้ที่อุปกรณ์ ในหลายกรณี ตัวระบุที่กำหนดขอบเขตระดับแอปก็เพียงพอแล้ว

บัญชี

สถานะของผู้ให้บริการขนส่ง

ในกรณีนี้ แอปของคุณจะโต้ตอบกับฟังก์ชันการโทรและรับส่งข้อความของอุปกรณ์โดยใช้บัญชีผู้ให้บริการ

ตัวระบุที่แนะนำให้ใช้: IMEI, IMSI และ Line1

ทำไมจึงแสดงรายการแนะนำนี้

การใช้ประโยชน์จากตัวระบุฮาร์ดแวร์เป็นสิ่งที่ยอมรับได้หากจำเป็นสำหรับฟังก์ชันการทำงานที่เกี่ยวข้องกับผู้ให้บริการ ตัวอย่างเช่น คุณสามารถใช้ตัวระบุเหล่านี้เพื่อสลับระหว่างผู้ให้บริการเครือข่ายมือถือหรือช่องซิม หรือเพื่อส่งข้อความ SMS ผ่าน IP (สำหรับ Line1) - บัญชีผู้ใช้ที่ใช้ซิม อย่างไรก็ตาม สำหรับแอปที่ไม่มีสิทธิ์ เราขอแนะนำให้ใช้การลงชื่อเข้าใช้บัญชีเพื่อดึงข้อมูลอุปกรณ์ของผู้ใช้ฝั่งเซิร์ฟเวอร์ สาเหตุหนึ่งคือใน Android 6.0 (ระดับ API 23) ขึ้นไป ตัวระบุเหล่านี้จะใช้ได้ผ่านสิทธิ์รันไทม์เท่านั้น ผู้ใช้อาจปิดสิทธิ์นี้ ดังนั้นแอปของคุณควรจัดการข้อยกเว้นเหล่านี้อย่างเหมาะสม

สถานะการสมัครใช้บริการบนอุปกรณ์เคลื่อนที่

ในกรณีนี้ คุณต้องเชื่อมโยงฟังก์ชันการทำงานของแอปกับการสมัครใช้บริการมือถือบางรายการในอุปกรณ์ ตัวอย่างเช่น คุณอาจมีข้อกำหนดในการยืนยันสิทธิ์เข้าถึงฟีเจอร์บางอย่างของแอปพรีเมียมตามการสมัครใช้บริการมือถือของอุปกรณ์ผ่านซิม

ตัวระบุที่แนะนำให้ใช้: Subscription ID API เพื่อระบุซิมที่ใช้ในอุปกรณ์

รหัสการสมัครใช้บริการจะให้ค่าดัชนี (เริ่มต้นที่ 1) เพื่อระบุซิมที่ติดตั้ง (รวมถึงซิมจริงและซิมอิเล็กทรอนิกส์) ที่ใช้ในอุปกรณ์โดยไม่ซ้ำกัน แอปสามารถเชื่อมโยงฟังก์ชันการทำงานกับข้อมูลการสมัครใช้บริการต่างๆ สำหรับซิมที่ระบุผ่านรหัสนี้ ค่านี้จะคงที่สำหรับซิมหนึ่งๆ เว้นแต่จะมีการรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้น อย่างไรก็ตาม อาจมีกรณีที่ซิมเดียวกันมีรหัสการสมัครใช้บริการที่แตกต่างกันในอุปกรณ์ต่างๆ หรือซิมที่แตกต่างกันมีรหัสเดียวกันในอุปกรณ์ต่างๆ

ทำไมจึงแสดงรายการแนะนำนี้

ปัจจุบันบางแอปอาจใช้ ICC ID เพื่อวัตถุประสงค์นี้ เนื่องจากรหัส ICC ไม่ซ้ำกันทั่วโลกและรีเซ็ตไม่ได้ การเข้าถึงจึงถูกจำกัดไว้เฉพาะแอปที่มีสิทธิ์ READ_PRIVILEGED_PHONE_STATE ตั้งแต่ Android 10 เป็นต้นมา ตั้งแต่ Android 11 เป็นต้นมา Android ได้จำกัดการเข้าถึง ICCID ผ่าน API getIccId() เพิ่มเติม ไม่ว่าระดับ API เป้าหมายของแอปจะเป็นระดับใดก็ตาม แอปที่ได้รับผลกระทบควรย้ายข้อมูลไปใช้รหัสการสมัครใช้บริการแทน

การลงชื่อเพียงครั้งเดียว

ในกรณีนี้ แอปของคุณจะมอบประสบการณ์การลงชื่อเพียงครั้งเดียว ซึ่งช่วยให้ผู้ใช้เชื่อมโยงบัญชีที่มีอยู่กับองค์กรของคุณได้

ตัวระบุที่แนะนำให้ใช้: บัญชีที่เข้ากันได้กับผู้จัดการฝ่ายดูแลลูกค้า เช่น การลิงก์บัญชี Google

ทำไมจึงแสดงรายการแนะนำนี้

การลิงก์บัญชี Google ช่วยให้ผู้ใช้เชื่อมโยงบัญชี Google ที่มีอยู่กับแอปของคุณได้ ซึ่งจะช่วยให้เข้าถึงผลิตภัณฑ์และบริการขององค์กรได้อย่างราบรื่นและปลอดภัยยิ่งขึ้น นอกจากนี้ คุณยังสามารถกำหนดขอบเขต OAuth ที่กำหนดเองเพื่อแชร์เฉพาะข้อมูลที่จำเป็น ซึ่งจะช่วยเพิ่มความไว้วางใจของผู้ใช้ด้วยการกำหนดวิธีใช้ข้อมูลอย่างชัดเจน

โฆษณา

กลุ่มเป้าหมาย

ในกรณีนี้ แอปจะสร้างโปรไฟล์ความสนใจของผู้ใช้เพื่อแสดงโฆษณาที่เกี่ยวข้องมากขึ้น

ตัวระบุที่แนะนำให้ใช้: หากแอปของคุณใช้รหัสสำหรับโฆษณาและอัปโหลดหรือเผยแพร่ไปยัง Google Play รหัสดังกล่าวต้องเป็นรหัสโฆษณา

ทำไมจึงแสดงรายการแนะนำนี้

กรณีนี้เป็นกรณีการใช้งานที่เกี่ยวข้องกับโฆษณาซึ่งอาจต้องใช้รหัสที่ใช้ได้ในแอปต่างๆ ขององค์กร ดังนั้นการใช้รหัสโฆษณาจึงเป็นโซลูชันที่เหมาะสมที่สุด คุณต้องใช้รหัสโฆษณาสำหรับกรณีการใช้งานโฆษณาตามนโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play เนื่องจากผู้ใช้สามารถรีเซ็ตรหัสได้

ไม่ว่าคุณจะแชร์ข้อมูลผู้ใช้ในแอปหรือไม่ หากคุณรวบรวมและใช้ข้อมูลดังกล่าวเพื่อวัตถุประสงค์ด้านโฆษณา คุณต้องประกาศวัตถุประสงค์ด้านโฆษณาในส่วนความปลอดภัยของข้อมูลในหน้าเนื้อหาแอปใน Play Console

การวัดผล

ในกรณีนี้ แอปของคุณจะสร้างโปรไฟล์ของผู้ใช้โดยอิงตามพฤติกรรมในแอปต่างๆ ขององค์กรในอุปกรณ์เดียวกัน

ตัวระบุที่แนะนำให้ใช้: รหัสโฆษณาหรือ Play Install Referrer API

ทำไมจึงแสดงรายการแนะนำนี้

กรณีนี้เป็นกรณีการใช้งานที่เกี่ยวข้องกับโฆษณาซึ่งอาจต้องใช้รหัสที่ใช้ได้ในแอปต่างๆ ขององค์กร ดังนั้นการใช้รหัสโฆษณาจึงเป็นโซลูชันที่เหมาะสมที่สุด หากคุณใช้รหัสสำหรับกรณีการใช้งานโฆษณา รหัสนั้นต้องเป็นรหัสโฆษณาเนื่องจากผู้ใช้สามารถรีเซ็ตได้ ดูข้อมูลเพิ่มเติมได้ในนโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play

Conversion

ในกรณีนี้ คุณกำลังติดตาม Conversion เพื่อดูว่ากลยุทธ์การตลาดประสบความสำเร็จหรือไม่

ตัวระบุที่แนะนำให้ใช้: รหัสโฆษณาหรือ Play Install Referrer API

ทำไมจึงแสดงรายการแนะนำนี้

กรณีนี้เป็นกรณีการใช้งานที่เกี่ยวข้องกับโฆษณาซึ่งอาจต้องใช้รหัสที่ใช้ได้ในแอปต่างๆ ขององค์กร ดังนั้นการใช้รหัสโฆษณาจึงเป็นโซลูชันที่เหมาะสมที่สุด คุณต้องใช้รหัสโฆษณาสำหรับกรณีการใช้งานโฆษณาตามนโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play เนื่องจากผู้ใช้สามารถรีเซ็ตรหัสโฆษณาได้

รีมาร์เก็ตติ้ง

ในกรณีนี้ แอปจะแสดงโฆษณาตามความสนใจก่อนหน้าของผู้ใช้

ตัวระบุที่แนะนำให้ใช้: รหัสโฆษณา

ทำไมจึงแสดงรายการแนะนำนี้

กรณีนี้เป็นกรณีการใช้งานที่เกี่ยวข้องกับโฆษณาซึ่งอาจต้องใช้รหัสที่ใช้ได้ในแอปต่างๆ ขององค์กร ดังนั้นการใช้รหัสโฆษณาจึงเป็นโซลูชันที่เหมาะสมที่สุด คุณต้องใช้รหัสโฆษณาสำหรับกรณีการใช้งานโฆษณาตามนโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play เนื่องจากผู้ใช้สามารถรีเซ็ตรหัสได้

การวิเคราะห์แอป

ในกรณีนี้ แอปจะประเมินพฤติกรรมของผู้ใช้เพื่อช่วยคุณพิจารณาสิ่งต่อไปนี้

  • ผลิตภัณฑ์หรือแอปอื่นๆ ขององค์กรที่อาจเหมาะกับผู้ใช้
  • วิธีทำให้ผู้ใช้สนใจใช้แอปของคุณต่อไป
  • วัดสถิติการใช้งานและการวิเคราะห์สำหรับผู้ใช้ที่ออกจากระบบหรือไม่ระบุตัวตน

วิธีแก้ปัญหาที่ทำได้มีดังนี้

  • รหัสชุดแอป: รหัสชุดแอปช่วยให้คุณวิเคราะห์พฤติกรรมของผู้ใช้ในแอปหลายแอปที่องค์กรของคุณเป็นเจ้าของได้ ตราบใดที่คุณไม่ได้ใช้ข้อมูลผู้ใช้เพื่อวัตถุประสงค์ในการโฆษณา หากคุณกำหนดเป้าหมายอุปกรณ์ที่ทำงานด้วยบริการ Google Play เราขอแนะนำให้ใช้รหัสชุดแอป
  • รหัส Firebase (FID): FID จะกำหนดขอบเขตไว้ที่แอปที่สร้างรหัสดังกล่าว ซึ่งจะป้องกันไม่ให้มีการใช้ตัวระบุเพื่อติดตามผู้ใช้ในแอปต่างๆ นอกจากนี้ยังรีเซ็ตได้ง่าย เนื่องจากผู้ใช้สามารถล้างข้อมูลแอปหรือติดตั้งแอปอีกครั้งได้ กระบวนการสร้าง FID นั้นตรงไปตรงมา โปรดดูคู่มือการติดตั้ง Firebase

การพัฒนาแอป

รายงานข้อขัดข้อง

ในกรณีนี้ แอปของคุณจะรวบรวมข้อมูลเกี่ยวกับเวลาและสาเหตุที่แอปขัดข้องในอุปกรณ์ของผู้ใช้

ตัวระบุที่แนะนำให้ใช้: FID หรือรหัสชุดแอป

ทำไมจึงแสดงรายการแนะนำนี้

FID จะกำหนดขอบเขตไว้ที่แอปที่สร้างขึ้น ซึ่งจะป้องกันไม่ให้มีการใช้ตัวระบุเพื่อติดตามผู้ใช้ในแอปต่างๆ นอกจากนี้ยังรีเซ็ตได้ง่าย เนื่องจากผู้ใช้สามารถล้างข้อมูลแอปหรือติดตั้งแอปอีกครั้งได้ กระบวนการสร้าง FID นั้นตรงไปตรงมา โปรดดูคู่มือการติดตั้ง Firebase รหัสชุดแอปช่วยให้คุณวิเคราะห์พฤติกรรมของผู้ใช้ในแอปหลายแอปที่องค์กรของคุณเป็นเจ้าของได้ ตราบใดที่คุณไม่ได้ใช้ข้อมูลผู้ใช้เพื่อวัตถุประสงค์ในการโฆษณา

การรายงานประสิทธิภาพ

ในกรณีนี้ แอปจะรวบรวมเมตริกประสิทธิภาพ เช่น เวลาในการโหลดและการใช้งานแบตเตอรี่ เพื่อช่วยปรับปรุงคุณภาพของแอป

ตัวระบุที่แนะนำให้ใช้: Firebase Performance Monitoring

ทำไมจึงแสดงรายการแนะนำนี้

Firebase Performance Monitoring ช่วยให้คุณมุ่งเน้นที่เมตริกที่สําคัญที่สุดสําหรับคุณ และทดสอบผลกระทบของการเปลี่ยนแปลงล่าสุดในแอป

การทดสอบแอป

ในกรณีนี้ แอปจะประเมินประสบการณ์ของผู้ใช้ที่มีต่อแอปเพื่อวัตถุประสงค์ในการทดสอบหรือแก้ไขข้อบกพร่อง

ตัวระบุที่แนะนำให้ใช้: FID หรือรหัสชุดแอป

ทำไมจึงแสดงรายการแนะนำนี้

FID จะกำหนดขอบเขตไว้ที่แอปที่สร้างขึ้น ซึ่งจะป้องกันไม่ให้มีการใช้ตัวระบุเพื่อติดตามผู้ใช้ในแอปต่างๆ นอกจากนี้ยังรีเซ็ตได้ง่าย เนื่องจากผู้ใช้สามารถล้างข้อมูลแอปหรือติดตั้งแอปอีกครั้งได้ กระบวนการสร้าง FID นั้นตรงไปตรงมา โปรดดูคู่มือการติดตั้ง Firebase รหัสชุดแอปช่วยให้คุณวิเคราะห์พฤติกรรมของผู้ใช้ในแอปหลายแอปที่องค์กรของคุณเป็นเจ้าของได้ ตราบใดที่คุณไม่ได้ใช้ข้อมูลผู้ใช้เพื่อวัตถุประสงค์ในการโฆษณา

การติดตั้งข้ามอุปกรณ์

ในกรณีนี้ แอปของคุณต้องระบุอินสแตนซ์ที่ถูกต้องของแอปเมื่อติดตั้งในอุปกรณ์หลายเครื่องสำหรับผู้ใช้รายเดียวกัน

ตัวระบุที่แนะนำให้ใช้: FID หรือ GUID

ทำไมจึงแสดงรายการแนะนำนี้

FID ได้รับการออกแบบมาเพื่อวัตถุประสงค์นี้โดยเฉพาะ โดยมีขอบเขตจำกัดเฉพาะในแอปเท่านั้น จึงไม่สามารถใช้เพื่อติดตามผู้ใช้ในแอปต่างๆ ได้ และจะรีเซ็ตเมื่อติดตั้งแอปอีกครั้ง ในบางกรณีที่เกิดขึ้นไม่บ่อยนักซึ่ง FID ไม่เพียงพอ คุณสามารถใช้ GUID ได้ด้วย

ความปลอดภัย

การตรวจจับการละเมิด

ในกรณีนี้ คุณกำลังพยายามตรวจหาอุปกรณ์ปลอมหลายเครื่องที่โจมตีบริการแบ็กเอนด์ของคุณ

ตัวระบุที่แนะนำให้ใช้: โทเค็นความสมบูรณ์ของ Google Play Integrity API

ทำไมจึงแสดงรายการแนะนำนี้

หากต้องการยืนยันว่าคำขอมาจากอุปกรณ์ Android จริง ไม่ใช่โปรแกรมจำลองหรือโค้ดอื่นๆ ที่ปลอมแปลงเป็นอุปกรณ์อื่น ให้ใช้ Google Play Integrity API

การฉ้อโกงผ่านโฆษณา

ในกรณีนี้ แอปจะตรวจสอบว่าการแสดงผลและการดำเนินการของผู้ใช้ในแอปเป็นของจริงและยืนยันได้

ตัวระบุที่แนะนำให้ใช้: รหัสโฆษณา

ทำไมจึงแสดงรายการแนะนำนี้

คุณต้องใช้รหัสโฆษณาสำหรับกรณีการใช้งานโฆษณาตามนโยบายเนื้อหาสำหรับนักพัฒนาแอป Google Play เนื่องจากผู้ใช้สามารถรีเซ็ตรหัสโฆษณาได้

การจัดการสิทธิ์ดิจิทัล (DRM)

ในกรณีนี้ แอปของคุณต้องการป้องกันการเข้าถึงทรัพย์สินทางปัญญาหรือเนื้อหาที่ต้องชำระเงินที่เป็นการฉ้อโกง

ตัวระบุที่แนะนำให้ใช้: การใช้ FID หรือ GUID จะบังคับให้ผู้ใช้ติดตั้งแอปอีกครั้งเพื่อหลีกเลี่ยงขีดจำกัดเนื้อหา ซึ่งเป็นภาระที่เพียงพอที่จะยับยั้งคนส่วนใหญ่ได้ หากการป้องกันนี้ไม่เพียงพอ Android จะมี DRM API ซึ่งใช้เพื่อจำกัดการเข้าถึงเนื้อหาได้ โดยมีตัวระบุต่อ APK คือ Widevine ID

ค่ากำหนดของผู้ใช้

ในกรณีนี้ แอปจะบันทึกสถานะผู้ใช้ต่ออุปกรณ์ในแอป โดยเฉพาะสำหรับผู้ใช้ที่ไม่ได้ลงชื่อเข้าใช้ คุณอาจโอนสถานะนี้ไปยังแอปอื่นที่ลงชื่อด้วยคีย์เดียวกันในอุปกรณ์เดียวกัน

ตัวระบุที่แนะนำให้ใช้: FID หรือ GUID

ทำไมจึงแสดงรายการแนะนำนี้

เราไม่แนะนำให้เก็บข้อมูลไว้ตลอดการติดตั้งอีกครั้ง เนื่องจากผู้ใช้อาจต้องการรีเซ็ตค่ากำหนดโดยการติดตั้งแอปอีกครั้ง