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

ผู้ใช้จำนวนมากยังคงจัดการข้อมูลเข้าสู่ระบบของตนเองเมื่อตั้งค่าอุปกรณ์ที่ใช้ 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 จะสร้างขึ้นบนโครงสร้างพื้นฐานการสำรองและกู้คืนข้อมูล

คู่มือนี้จะครอบคลุมกรณีการใช้งานของการบันทึกโทเค็นของผู้ใช้ไปยัง 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 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 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)

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

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

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

  val deleteAllRequest = DeleteBytesRequest.Builder()
  .setDeleteAll(true)
  .build()
retrieve bytes, the key BlockstoreClient.DEFAULT_BYTES_DATA_KEY can be used
in the RetrieveBytesRequest instance in order to get your saved data

The following example shows how to retrieve the default key.

Java

End-to-end encryption

In order for end-to-end encryption to be made available, the device must be running Android 9 or higher, and the user must have set a screen lock (PIN, pattern, or password) for their device. You can verify if encryption will be available on the device by calling isEndToEndEncryptionAvailable().

The following sample shows how to verify if encryption will be available during cloud backup:

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 O ขึ้นไป คุณสามารถเรียกให้ระบบสำรองข้อมูล Block Store ไปยังระบบคลาวด์ด้วยตนเองได้โดยไปที่การตั้งค่า > Google > สำรองข้อมูล แล้วคลิกปุ่ม "สำรองข้อมูลเลย"
    1. หากต้องการยืนยันว่าการสำรองข้อมูลในระบบคลาวด์ของ Block Store สำเร็จ ให้ทำดังนี้
      1. หลังจากสำรองข้อมูลเสร็จแล้ว ให้ค้นหาบรรทัดบันทึกที่มีแท็ก "CloudSyncBpTkSvc"
      2. คุณควรเห็นบรรทัดที่มีลักษณะดังนี้ "......, CloudSyncBpTkSvc: ซิงค์ result: SUCCESS, ..., ขนาดที่อัปโหลด: XXX ไบต์ ..."
    2. หลังจากสำรองข้อมูลในระบบคลาวด์ของ Block Store แล้ว จะมีระยะเวลา "พัก" 5 นาที ภายใน 5 นาทีดังกล่าว การคลิกปุ่ม "สำรองข้อมูลเลย" จะไม่ทริกเกอร์การสำรองข้อมูล Block Store ในระบบคลาวด์อีกครั้ง
  4. รีเซ็ตอุปกรณ์เป้าหมายเป็นค่าเริ่มต้นและทำตามขั้นตอนการกู้คืนในระบบคลาวด์ เลือกเพื่อกู้คืนแอปทดสอบในระหว่างขั้นตอนการกู้คืน ดูข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนการกู้คืนในระบบคลาวด์ได้ที่ขั้นตอนการกู้คืนในระบบคลาวด์ที่รองรับ
  5. ในอุปกรณ์เป้าหมาย ให้ใช้แอปทดสอบเพื่อเรียกใช้ Block Store API เพื่อดึงข้อมูลของคุณ
  6. ตรวจสอบว่าไบต์ที่ดึงมาเหมือนกับไบต์ที่จัดเก็บไว้ในอุปกรณ์ต้นทาง

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

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

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