ผู้ใช้หลายคนยังคงจัดการข้อมูลเข้าสู่ระบบของตนเองเมื่อตั้งค่าอุปกรณ์ Android เครื่องใหม่ กระบวนการที่ต้องดําเนินการด้วยตนเองอาจทําได้ยากและมักจะทําให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี API ของบล็อกสโตร์เป็นไลบรารีที่ขับเคลื่อนโดยบริการ Google Play ซึ่งต้องการแก้ปัญหานี้ด้วยวิธีที่ช่วยให้แอปบันทึกข้อมูลเข้าสู่ระบบของผู้ใช้โดยไม่มีความซับซ้อนหรือความเสี่ยงด้านความปลอดภัยที่เกี่ยวข้องกับการบันทึกรหัสผ่านของผู้ใช้
API ของบล็อก Store ช่วยให้แอปจัดเก็บข้อมูลเข้าสู่ระบบของผู้ใช้ซึ่งสามารถตรวจสอบสิทธิ์ผู้ใช้อีกครั้งในอุปกรณ์ใหม่ได้ภายหลัง วิธีนี้จะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่นยิ่งขึ้น เนื่องจากผู้ใช้ไม่จําเป็นต้องเห็นหน้าจอลงชื่อเข้าใช้เมื่อเปิดแอปเป็นครั้งแรกในอุปกรณ์เครื่องใหม่
การใช้บล็อกร้านค้ามีประโยชน์ดังนี้
- โซลูชันพื้นที่เก็บข้อมูลเข้าสู่ระบบที่เข้ารหัสสําหรับนักพัฒนาซอฟต์แวร์ ข้อมูลเข้าสู่ระบบจะได้รับการเข้ารหัสจากต้นทางถึงปลายทางเมื่อเป็นไปได้
- บันทึกโทเค็นแทนชื่อผู้ใช้และรหัสผ่าน
- กําจัดจุดติดขัดในขั้นตอนการลงชื่อเข้าใช้
- บันทึกผู้ใช้จากภาระในการจัดการรหัสผ่านที่ซับซ้อน
- Google ยืนยันตัวตนของผู้ใช้
ก่อนเริ่มต้น
ทําตามขั้นตอนต่อไปนี้เพื่อเตรียมแอป
กําหนดค่าแอป
ในไฟล์ build.gradle
ระดับโปรเจ็กต์ ให้ใส่ที่เก็บ Maven ของ Google ทั้งในส่วน buildscript
และ allprojects
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
เพิ่มทรัพยากร Dependency ของ Google Play สําหรับ Block Store API ในไฟล์บิลด์ Gradle ของโมดูล ซึ่งโดยทั่วไปคือ app/build.gradle
dependencies {
implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}
วิธีการทำงาน
Block store เป็นกลไกการลงชื่อเข้าใช้ที่ใช้โทเค็นซึ่งมีการเข้ารหัสจากต้นทางถึงปลายทาง และสร้างขึ้นบนโครงสร้างพื้นฐานของการสํารองและกู้คืนข้อมูล ขั้นตอนต่อไปนี้จะสรุปวิธีการทํางานของแอปที่ใช้ Block Store
- ระหว่างขั้นตอนการตรวจสอบสิทธิ์แอปหรือหลังจากนั้น คุณสามารถจัดเก็บโทเค็นการตรวจสอบสิทธิ์ของผู้ใช้ไปยังการบล็อกร้านค้าเพื่อดึงข้อมูลในภายหลังได้
- โดยระบบจะเก็บข้อมูลโทเค็นไว้ในเครื่องและสามารถสํารองข้อมูลไปยังระบบคลาวด์ได้ เข้ารหัสจากต้นทางถึงปลายทางเมื่อเป็นไปได้
- ระบบจะโอนข้อมูลเมื่อผู้ใช้เริ่มขั้นตอนการกู้คืนในอุปกรณ์เครื่องใหม่
- หากผู้ใช้กู้คืนแอประหว่างขั้นตอนการกู้คืน แอปจะ เรียกโทเค็นที่บันทึกไว้จาก Block Store ในอุปกรณ์ใหม่ได้
กําลังบันทึกโทเค็น
เมื่อผู้ใช้ลงชื่อเข้าใช้แอป คุณจะบันทึกโทเค็นการตรวจสอบสิทธิ์ที่สร้างไว้สําหรับผู้ใช้รายนั้นในการบล็อกร้านค้าได้ ซึ่งทําได้โดยการโทรหา setBytes()
บนอินสแตนซ์ของ StoreBytesData.Builder
เพื่อจัดเก็บข้อมูลเข้าสู่ระบบของผู้ใช้ไปยังอุปกรณ์ต้นทาง หลังจากที่บันทึกโทเค็นด้วย Block Store แล้ว ระบบจะเข้ารหัสและจัดเก็บโทเค็นไว้ในอุปกรณ์
ตัวอย่างต่อไปนี้แสดงวิธีบันทึกโทเค็นการตรวจสอบสิทธิ์ลงในอุปกรณ์ในเครื่อง
val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
.setBytes(/* BYTE_ARRAY */)
.build()
client.storeBytes(data)
.addOnSuccessListener{ result ->
Log.d(TAG, "Stored: ${result} bytes")
}
.addOnFailureListener { e ->
Log.e(TAG, “Failed to store bytes”, e)
}
กําลังเรียกโทเค็น
หลังจากนั้น เมื่อผู้ใช้ทําตามขั้นตอนการกู้คืนในอุปกรณ์เครื่องใหม่ บริการ Google Play จะยืนยันผู้ใช้ก่อน แล้วจึงดึงข้อมูล "บล็อก" ใน Store ผู้ใช้ได้ตกลงที่จะกู้คืนข้อมูลแอปของคุณซึ่งเป็นส่วนหนึ่งของขั้นตอนการกู้คืนอยู่แล้ว จึงไม่จําเป็นต้องได้รับความยินยอมเพิ่มเติม เมื่อผู้ใช้เปิดแอปของคุณ คุณจะขอโทเค็นจาก Block Store ได้โดยการเรียกใช้ retrieveBytes()
จากนั้นค่อยใช้โทเค็นที่ดึงมาเพื่อให้ผู้ใช้ลงชื่อเข้าใช้ในอุปกรณ์ใหม่ต่อไป
ตัวอย่างต่อไปนี้แสดงวิธีเรียกโทเค็นที่เข้ารหัสซึ่งก่อนหน้านี้จัดเก็บไว้ด้วย Block Store
val client = Blockstore.getClient(this)
client.retrieveBytes()
.addOnSuccessListener { result ->
Log.d(TAG, "Retrieved: ${String(result)}")
}
.addOnFailureListener { e ->
Log.e(TAG, "Failed to retrieve bytes", e)
}
}
การเข้ารหัสจากต้นทางถึงปลายทาง
อุปกรณ์ต้องใช้ Android 9 ขึ้นไปจึงจะตั้งค่าการเข้ารหัสจากต้นทางถึงปลายทางได้ และต้องตั้งค่าการล็อกหน้าจอ (PIN, รูปแบบ หรือรหัสผ่าน) ในอุปกรณ์ คุณตรวจสอบได้ว่าการเข้ารหัสพร้อมใช้งานในอุปกรณ์หรือไม่โดยเรียกใช้ isEndToEndEncryptionAvailable()
ตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบว่าการเข้ารหัสจะพร้อมใช้งานระหว่างการสํารองข้อมูลระบบคลาวด์หรือไม่
client.isEndToEndEncryptionAvailable()
.addOnSuccessListener { result ->
Log.d(TAG, "Will Block Store cloud backup be end-to-end encrypted? $result")
}
เปิดใช้การสํารองข้อมูลในระบบคลาวด์
หากต้องการเปิดใช้การสํารองข้อมูลในระบบคลาวด์ ให้เพิ่มเมธอด setShouldBackupToCloud()
ในออบเจ็กต์ StoreBytesData
ส่วน "บล็อกร้านค้า" จะสํารองข้อมูลไปยังไบต์ที่จัดเก็บไว้เป็นระยะๆ เมื่อ setShouldBackupToCloud()
ตั้งค่าเป็น "จริง"
ตัวอย่างต่อไปนี้แสดงวิธีเปิดใช้การสํารองข้อมูลในระบบคลาวด์ เฉพาะเมื่อการเข้ารหัสระบบคลาวด์เข้ารหัสจากต้นทางถึงปลายทางเท่านั้น
val client = Blockstore.getClient(this)
val storeBytesDataBuilder = StoreBytesData.Builder()
.setBytes(/* BYTE_ARRAY */)
client.isEndToEndEncryptionAvailable()
.addOnSuccessListener { isE2EEAvailable ->
if (isE2EEAvailable) {
storeBytesDataBuilder.setShouldBackupToCloud(true)
Log.d(TAG, "E2EE is available, enable backing up bytes to the cloud.")
client.storeBytes(storeBytesDataBuilder.build())
.addOnSuccessListener { result ->
Log.d(TAG, "stored: ${result.getBytesStored()}")
}.addOnFailureListener { e ->
Log.e(TAG, “Failed to store bytes”, e)
}
} else {
Log.d(TAG, "E2EE is not available, only store bytes for D2D restore.")
}
}
วิธีทดสอบ
ใช้วิธีการต่อไปนี้ระหว่างการพัฒนาเพื่อทดสอบขั้นตอนการกู้คืน
ถอนการติดตั้ง/ติดตั้งอุปกรณ์เดียวกัน
หากผู้ใช้เปิดใช้บริการสํารอง (ตรวจสอบได้ที่การตั้งค่า > Google > การสํารองข้อมูล) ข้อมูลการบล็อกร้านค้าจะคงอยู่ในการถอนการติดตั้ง/ติดตั้งแอปอีกครั้ง
คุณสามารถทดสอบตามขั้นตอนต่อไปนี้
- ผสานรวม BlockStore API กับแอปทดสอบ
- ใช้แอปทดสอบเพื่อเรียกใช้ BlockStore API เพื่อจัดเก็บข้อมูล
- ถอนการติดตั้งแอปทดสอบ แล้วติดตั้งแอปอีกครั้งในอุปกรณ์เครื่องเดียวกัน
- ใช้แอปทดสอบเพื่อเรียกใช้ BlockStore API เพื่อดึงข้อมูลของคุณ
- ตรวจสอบว่าไบต์ที่ดึงมานั้นเหมือนกับที่เก็บไว้ก่อนถอนการติดตั้ง
ระหว่างอุปกรณ์
ในกรณีส่วนใหญ่ คุณจะต้องรีเซ็ตอุปกรณ์เป้าหมายเป็นค่าเริ่มต้น แล้วป้อนขั้นตอนการกู้คืนแบบไร้สายของ Android หรือการคืนค่าสาย Google (สําหรับอุปกรณ์ที่รองรับ)
การกู้คืนระบบคลาวด์
- ผสานรวม Blockstore API กับแอปทดสอบ ต้องส่งแอปทดสอบไปยัง Play Store
- ในอุปกรณ์ต้นทาง ให้ใช้แอปทดสอบเพื่อเรียกใช้ Blockstore API เพื่อเก็บข้อมูล โดยตั้งค่า ShoBackUpToCloud เป็น "จริง"
- สําหรับอุปกรณ์ O ขึ้นไป คุณทริกเกอร์การสํารองข้อมูลระบบคลาวด์ของ Block Store ด้วยตนเองได้
โดยไปที่การตั้งค่า > Google > การสํารองข้อมูล คลิกปุ่ม "สํารองข้อมูลเลย"
- หากต้องการยืนยันว่าการสํารองข้อมูลระบบคลาวด์ของ Store Store สําเร็จ คุณจะทําสิ่งต่อไปนี้ได้
- หลังจากสํารองข้อมูลเรียบร้อยแล้ว ให้ค้นหาบรรทัดบันทึกที่มีแท็ก "CloudSyncBpTkSvc"
- คุณควรจะเห็นบรรทัดดังนี้ "......, CloudSyncBpTkSvc: Sync result: SUCCESS, ..., uploaded size: XXX bytes ..."
- หลังจากการสํารองข้อมูลในระบบคลาวด์ของบล็อกร้านค้าแล้ว จะมีระยะเวลา "พัก" 5 นาที การคลิกปุ่ม "สํารองข้อมูลเลย" ภายใน 5 นาทีจะไม่ทริกเกอร์การสํารองข้อมูลระบบคลาวด์ของบล็อกร้านค้าอื่น
- หากต้องการยืนยันว่าการสํารองข้อมูลระบบคลาวด์ของ Store Store สําเร็จ คุณจะทําสิ่งต่อไปนี้ได้
- รีเซ็ตอุปกรณ์เป้าหมายเป็นค่าเริ่มต้นและทําตามขั้นตอนการคืนค่าระบบคลาวด์ เลือก เพื่อคืนค่าแอปทดสอบระหว่างขั้นตอนการกู้คืน โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนการกู้คืนระบบคลาวด์ที่ขั้นตอนการกู้คืนระบบคลาวด์ที่รองรับ
- ในอุปกรณ์เป้าหมาย ให้ใช้แอปทดสอบเพื่อเรียกใช้ Blockstore API เพื่อดึงข้อมูลของคุณ
- ตรวจสอบว่าไบต์ที่ดึงมานั้นเหมือนกับพื้นที่เก็บข้อมูลในอุปกรณ์ต้นทาง
ข้อกําหนดของอุปกรณ์
การเข้ารหัสจากต้นทางถึงปลายทาง
- การเข้ารหัสจากต้นทางถึงปลายทางรองรับในอุปกรณ์ที่ใช้ Android 9 (API 29) ขึ้นไป
- อุปกรณ์ต้องตั้งค่าการล็อกหน้าจอด้วย PIN, รูปแบบ หรือรหัสผ่านเพื่อเปิดใช้การเข้ารหัสจากต้นทางถึงปลายทางและเข้ารหัสข้อมูลของผู้ใช้อย่างถูกต้อง
ขั้นตอนการกู้คืนอุปกรณ์
คุณต้องใช้อุปกรณ์ต้นทางและอุปกรณ์เป้าหมายเพื่อกู้คืนอุปกรณ์ อุปกรณ์เหล่านี้จะเป็นอุปกรณ์ 2 เครื่องที่กําลังโอนข้อมูล
อุปกรณ์ต้นทางต้องใช้ Android 6 (API 23) ขึ้นไปเพื่อสํารองข้อมูล
อุปกรณ์เป้าหมายที่ใช้ Android 9 (API 29) ขึ้นไปเพื่อให้กู้คืนได้
คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนการคืนค่าอุปกรณ์ได้ที่นี่
ขั้นตอนการสํารองและกู้คืนในระบบคลาวด์
การสํารองและกู้คืนข้อมูลในระบบคลาวด์จะต้องใช้อุปกรณ์ต้นทางและอุปกรณ์เป้าหมาย
อุปกรณ์ต้นทางต้องใช้ Android 6 (API 23) ขึ้นไปเพื่อสํารองข้อมูล
ระบบรองรับอุปกรณ์เป้าหมายที่อิงตามผู้ให้บริการ อุปกรณ์ Pixel ใช้ฟีเจอร์นี้ได้จาก Android 9 (API 29) และอุปกรณ์อื่นๆ ทั้งหมดต้องใช้ Android 12 (API 31) ขึ้นไป