บล็อกร้านค้า

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

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

ประโยชน์ของการใช้ Block 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.4.0'
}

วิธีการทำงาน

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

คู่มือนี้จะครอบคลุม Use Case ของการบันทึกโทเค็นของผู้ใช้ลงใน Block Store ขั้นตอนต่อไปนี้จะอธิบายวิธีการทำงานของแอปที่ใช้ Block Store

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

การบันทึกโทเค็น

เมื่อผู้ใช้ลงชื่อเข้าใช้แอป คุณสามารถบันทึกโทเค็นการตรวจสอบสิทธิ์ที่สร้างขึ้นสำหรับผู้ใช้รายนั้นลงใน Block Store ได้ คุณสามารถจัดเก็บโทเค็นนี้โดยใช้ค่าคู่คีย์ที่ไม่ซ้ำกันซึ่งมีขนาดสูงสุด 4 KB ต่อรายการ หากต้องการจัดเก็บโทเค็น ให้เรียกใช้ setBytes() และ setKey() ในอินสแตนซ์ของ StoreBytesData.Builder เพื่อจัดเก็บข้อมูลเข้าสู่ระบบของผู้ใช้ไว้ในอุปกรณ์ต้นทาง หลังจากบันทึกโทเค็นด้วย Block Store แล้ว ระบบจะเข้ารหัสโทเค็นและจัดเก็บไว้ในอุปกรณ์

ตัวอย่างต่อไปนี้แสดงวิธีบันทึกโทเค็นการตรวจสอบสิทธิ์ลงในอุปกรณ์ภายในเครื่อง

Java

BlockstoreClient client = Blockstore.getClient(this);
byte[] bytes1 = new byte[] { 1, 2, 3, 4 };  // Store one data block.
String key1 = "com.example.app.key1";
StoreBytesData storeRequest1 = StoreBytesData.Builder()
        .setBytes(bytes1)
        // Call this method to set the key-value pair the data should be associated with.
        .setKeys(Arrays.asList(key1))
        .build();
client.storeBytes(storeRequest1)
  .addOnSuccessListener(result -> Log.d(TAG, "stored " + result + " bytes"))
  .addOnFailureListener(e -> Log.e(TAG, "Failed to store bytes", e));

Kotlin

val client = Blockstore.getClient(this)

val bytes1 = byteArrayOf(1, 2, 3, 4) // Store one data block.
val key1 = "com.example.app.key1"
val storeRequest1 = StoreBytesData.Builder()
  .setBytes(bytes1) // Call this method to set the key value with which the data should be associated with.
  .setKeys(Arrays.asList(key1))
  .build()
client.storeBytes(storeRequest1)
  .addOnSuccessListener { result: Int ->
    Log.d(TAG,
          "Stored $result bytes")
  }
  .addOnFailureListener { e ->
    Log.e(TAG, "Failed to store bytes", e)
  }

ใช้โทเค็นเริ่มต้น

ข้อมูลที่บันทึกโดยใช้ StoreBytes โดยไม่มีคีย์จะใช้คีย์เริ่มต้น BlockstoreClient.DEFAULT_BYTES_DATA_KEY

Java

BlockstoreClient client = Blockstore.getClient(this);
// The default key BlockstoreClient.DEFAULT_BYTES_DATA_KEY.
byte[] bytes = new byte[] { 9, 10 };
StoreBytesData storeRequest = StoreBytesData.Builder()
        .setBytes(bytes)
        .build();
client.storeBytes(storeRequest)
  .addOnSuccessListener(result -> Log.d(TAG, "stored " + result + " bytes"))
  .addOnFailureListener(e -> Log.e(TAG, "Failed to store bytes", e));

Kotlin

val client = Blockstore.getClient(this);
// the default key BlockstoreClient.DEFAULT_BYTES_DATA_KEY.
val bytes = byteArrayOf(1, 2, 3, 4)
val storeRequest = StoreBytesData.Builder()
  .setBytes(bytes)
  .build();
client.storeBytes(storeRequest)
  .addOnSuccessListener { result: Int ->
    Log.d(TAG,
          "stored $result bytes")
  }
  .addOnFailureListener { e ->
    Log.e(TAG, "Failed to store bytes", e)
  }

กำลังดึงข้อมูลโทเค็น

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

ตัวอย่างต่อไปนี้แสดงวิธีดึงข้อมูลโทเค็นหลายรายการตามคีย์ที่เฉพาะเจาะจง

Java

BlockstoreClient client = Blockstore.getClient(this);

// Retrieve data associated with certain keys.
String key1 = "com.example.app.key1";
String key2 = "com.example.app.key2";
String key3 = BlockstoreClient.DEFAULT_BYTES_DATA_KEY; // Used to retrieve data stored without a key

List<String> requestedKeys = Arrays.asList(key1, key2, key3); // Add keys to array
RetrieveBytesRequest retrieveRequest = new RetrieveBytesRequest.Builder()
    .setKeys(requestedKeys)
    .build();

client.retrieveBytes(retrieveRequest)
    .addOnSuccessListener(
        result -> {
          Map<String, BlockstoreData> blockstoreDataMap = result.getBlockstoreDataMap();
          for (Map.Entry<String, BlockstoreData> entry : blockstoreDataMap.entrySet()) {
            Log.d(TAG, String.format(
                "Retrieved bytes %s associated with key %s.",
                new String(entry.getValue().getBytes()), entry.getKey()));
          }
        })
    .addOnFailureListener(e -> Log.e(TAG, "Failed to store bytes", e));

Kotlin

val client = Blockstore.getClient(this)

// Retrieve data associated with certain keys.
val key1 = "com.example.app.key1"
val key2 = "com.example.app.key2"
val key3 = BlockstoreClient.DEFAULT_BYTES_DATA_KEY // Used to retrieve data stored without a key

val requestedKeys = Arrays.asList(key1, key2, key3) // Add keys to array

val retrieveRequest = RetrieveBytesRequest.Builder()
  .setKeys(requestedKeys)
  .build()

client.retrieveBytes(retrieveRequest)
  .addOnSuccessListener { result: RetrieveBytesResponse ->
    val blockstoreDataMap =
      result.blockstoreDataMap
    for ((key, value) in blockstoreDataMap) {
      Log.d(ContentValues.TAG, String.format(
        "Retrieved bytes %s associated with key %s.",
        String(value.bytes), key))
    }
  }
  .addOnFailureListener { e: Exception? ->
    Log.e(ContentValues.TAG,
          "Failed to store bytes",
          e)
  }

กำลังดึงข้อมูลโทเค็นทั้งหมด

ตัวอย่างต่อไปนี้แสดงวิธีดึงข้อมูลโทเค็นทั้งหมดที่บันทึกไว้ใน BlockStore

Java

BlockstoreClient client = Blockstore.getClient(this)

// Retrieve all data.
RetrieveBytesRequest retrieveRequest = new RetrieveBytesRequest.Builder()
    .setRetrieveAll(true)
    .build();

client.retrieveBytes(retrieveRequest)
    .addOnSuccessListener(
        result -> {
          Map<String, BlockstoreData> blockstoreDataMap = result.getBlockstoreDataMap();
          for (Map.Entry<String, BlockstoreData> entry : blockstoreDataMap.entrySet()) {
            Log.d(TAG, String.format(
                "Retrieved bytes %s associated with key %s.",
                new String(entry.getValue().getBytes()), entry.getKey()));
          }
        })
    .addOnFailureListener(e -> Log.e(TAG, "Failed to store bytes", e));

Kotlin

val client = Blockstore.getClient(this)

val retrieveRequest = RetrieveBytesRequest.Builder()
    .setRetrieveAll(true)
    .build()

  client.retrieveBytes(retrieveRequest)
    .addOnSuccessListener { result: RetrieveBytesResponse ->
      val blockstoreDataMap =
        result.blockstoreDataMap
      for ((key, value) in blockstoreDataMap) {
        Log.d(ContentValues.TAG, String.format(
          "Retrieved bytes %s associated with key %s.",
          String(value.bytes), key))
      }
    }
    .addOnFailureListener { e: Exception? ->
      Log.e(ContentValues.TAG,
            "Failed to store bytes",
            e)
    }

ตัวอย่างต่อไปนี้แสดงวิธีดึงข้อมูลคีย์เริ่มต้น

Java

BlockStoreClient client = Blockstore.getClient(this);
RetrieveBytesRequest retrieveRequest = new RetrieveBytesRequest.Builder()
    .setKeys(Arrays.asList(BlockstoreClient.DEFAULT_BYTES_DATA_KEY))
    .build();
client.retrieveBytes(retrieveRequest);

Kotlin

val client = Blockstore.getClient(this)

val retrieveRequest = RetrieveBytesRequest.Builder()
  .setKeys(Arrays.asList(BlockstoreClient.DEFAULT_BYTES_DATA_KEY))
  .build()
client.retrieveBytes(retrieveRequest)

กำลังลบโทเค็น

คุณอาจต้องลบโทเค็นออกจาก BlockStore ด้วยเหตุผลต่อไปนี้

  • ผู้ใช้ทำตามโฟลว์ผู้ใช้ออกจากระบบ
  • โทเค็นถูกเพิกถอนหรือไม่ถูกต้อง

คุณสามารถระบุโทเค็นที่ต้องการลบได้โดยตั้งค่าอาร์เรย์ของคีย์ที่ต้องลบ ซึ่งคล้ายกับการดึงข้อมูลโทเค็น

ตัวอย่างต่อไปนี้แสดงวิธีลบคีย์บางรายการ

Java

BlockstoreClient client = Blockstore.getClient(this);

// Delete data associated with certain keys.
String key1 = "com.example.app.key1";
String key2 = "com.example.app.key2";
String key3 = BlockstoreClient.DEFAULT_BYTES_DATA_KEY; // Used to delete data stored without key

List<String> requestedKeys = Arrays.asList(key1, key2, key3) // Add keys to array
DeleteBytesRequest deleteRequest = new DeleteBytesRequest.Builder()
        .setKeys(requestedKeys)
        .build();
client.deleteBytes(deleteRequest)

Kotlin

val client = Blockstore.getClient(this)

// Retrieve data associated with certain keys.
val key1 = "com.example.app.key1"
val key2 = "com.example.app.key2"
val key3 = BlockstoreClient.DEFAULT_BYTES_DATA_KEY // Used to retrieve data stored without a key

val requestedKeys = Arrays.asList(key1, key2, key3) // Add keys to array

val retrieveRequest = DeleteBytesRequest.Builder()
      .setKeys(requestedKeys)
      .build()

client.deleteBytes(retrieveRequest)

ลบโทเค็นทั้งหมด

ตัวอย่างต่อไปนี้แสดงวิธีลบโทเค็นทั้งหมดที่บันทึกไว้ใน Block Store

Java

// Delete all data.
DeleteBytesRequest deleteAllRequest = new DeleteBytesRequest.Builder()
        .setDeleteAll(true)
        .build();
client.deleteBytes(deleteAllRequest)
  .addOnSuccessListener(result -> Log.d(TAG, "Any data found and deleted? " + result));

Kotlin

// Delete all data.
val deleteAllRequest = DeleteBytesRequest.Builder()
        .setDeleteAll(true)
        .build()
client.deleteBytes(deleteAllRequest)
  .addOnSuccessListener { result -> Log.d(TAG, "Any data found and deleted? $result") }

การเข้ารหัสจากต้นทางถึงปลายทาง

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

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

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { result ->
          Log.d(TAG, "Will Block Store cloud backup be end-to-end encrypted? $result")
        }

เปิดใช้การสำรองข้อมูลในระบบคลาวด์

หากต้องการเปิดใช้การสำรองข้อมูลในระบบคลาวด์ ให้เพิ่มเมธอด setShouldBackupToCloud() ลงในออบเจ็กต์ StoreBytesData Block Store จะสำรองข้อมูลไปยังระบบคลาวด์เป็นระยะๆ โดยจะจัดเก็บไบต์เมื่อตั้งค่า 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 > สำรองข้อมูล) ข้อมูล Block Store จะยังคงอยู่แม้จะมีการถอนการติดตั้งและติดตั้งแอปอีกครั้ง

คุณทำตามขั้นตอนต่อไปนี้เพื่อทดสอบได้

  1. ผสานรวม Block Store API เข้ากับแอปทดสอบ
  2. ใช้แอปทดสอบเพื่อเรียกใช้ Block Store API เพื่อจัดเก็บข้อมูล
  3. ถอนการติดตั้งแอปทดสอบ แล้วติดตั้งแอปอีกครั้งในอุปกรณ์เครื่องเดียวกัน
  4. ใช้แอปทดสอบเพื่อเรียกใช้ Block Store API เพื่อดึงข้อมูลของคุณ
  5. ยืนยันว่าไบต์ที่ดึงมาเหมือนกับที่จัดเก็บไว้ก่อนการถอนการติดตั้ง

จากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง

ในกรณีส่วนใหญ่ คุณจะต้องรีเซ็ตอุปกรณ์เป้าหมายเป็นค่าเริ่มต้น จากนั้นคุณจะเข้าสู่ขั้นตอนการกู้คืนแบบไร้สายของ Android หรือการกู้คืนโดยใช้สายของ Google (สำหรับอุปกรณ์ที่รองรับ)

การกู้คืนข้อมูลในระบบคลาวด์

  1. ผสานรวม Block Store API กับแอปทดสอบของคุณ โดยต้องส่งแอปทดสอบไปยัง Play Store
  2. ในอุปกรณ์ต้นทาง ให้ใช้แอปทดสอบเพื่อเรียกใช้ Block Store API เพื่อจัดเก็บข้อมูล โดยตั้งค่า shouldBackUpToCloud เป็น true
  3. ในอุปกรณ์ที่ใช้ Android 8.0 (ระดับ API 26) ขึ้นไป คุณสามารถเรียกให้ระบบสำรองข้อมูลในระบบคลาวด์ของ Block Store ด้วยตนเองได้โดยไปที่การตั้งค่า > Google > สำรองข้อมูล แล้วคลิกปุ่ม "สำรองข้อมูลเลย"
    1. หากต้องการยืนยันว่าการสำรองข้อมูลในระบบคลาวด์ของ Block Store สำเร็จ ให้ทำดังนี้
      1. หลังจากสำรองข้อมูลเสร็จแล้ว ให้ค้นหาบรรทัดบันทึกที่มีแท็ก [CloudSyncBackupTaskService]
      2. คุณควรเห็นบรรทัดดังนี้ ..., [CloudSyncBackupTaskService] sync result: SUCCESS, ..., uploaded size: [size] bytes ...
    2. หลังจากสำรองข้อมูลในระบบคลาวด์ของ Block Store แล้ว จะมีระยะเวลา "พัก" 5 นาที ภายใน 5 นาทีดังกล่าว การคลิกปุ่ม "สำรองข้อมูลเลย" จะไม่ทริกเกอร์การสำรองข้อมูลในระบบคลาวด์ของ Block Store อีกครั้ง
  4. รีเซ็ตอุปกรณ์เป้าหมายเป็นค่าเริ่มต้นและทำตามขั้นตอนการกู้คืนในระบบคลาวด์ เลือกเพื่อกู้คืนแอปทดสอบในระหว่างขั้นตอนการกู้คืน ดูข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนการกู้คืนในระบบคลาวด์ได้ที่ขั้นตอนการกู้คืนในระบบคลาวด์ที่รองรับ
  5. ในอุปกรณ์เป้าหมาย ให้ใช้แอปทดสอบเพื่อเรียกใช้ Block Store API เพื่อดึงข้อมูลของคุณ
  6. ตรวจสอบว่าไบต์ที่ดึงมาเหมือนกับไบต์ที่จัดเก็บไว้ในอุปกรณ์ต้นทาง

ข้อกำหนดของอุปกรณ์

ตรวจสอบข้อกำหนดต่อไปนี้สำหรับอุปกรณ์ที่เข้าร่วมการดำเนินการของ Block Store

การเข้ารหัสจากต้นทางถึงปลายทาง

  • การเข้ารหัสจากต้นทางถึงปลายทางรองรับในอุปกรณ์ที่ใช้ 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) ขึ้นไป