Chặn cửa hàng

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Nhiều người dùng vẫn quản lý thông tin xác thực của riêng họ khi thiết lập thiết bị Android mới. Quá trình thủ công này có thể trở nên khó khăn và thường dẫn đến trải nghiệm người dùng kém. Block Store API, một thư viện do các dịch vụ của Google Play cung cấp, tìm cách giải quyết vấn đề này bằng cách cung cấp một cách để ứng dụng lưu thông tin đăng nhập của người dùng mà không gặp phải sự phức tạp hoặc rủi ro về bảo mật liên quan đến việc lưu mật khẩu người dùng.

Block Store API cho phép ứng dụng của bạn lưu trữ thông tin đăng nhập của người dùng mà sau này ứng dụng có thể truy xuất để xác thực lại người dùng trên một thiết bị mới. Điều này giúp người dùng có trải nghiệm liền mạch hơn vì họ không cần xem màn hình đăng nhập khi khởi chạy ứng dụng của mình lần đầu tiên trên thiết bị mới.

Lợi ích của việc sử dụng Block Store bao gồm:

  • Giải pháp lưu trữ thông tin xác thực đã mã hoá cho nhà phát triển. Thông tin đăng nhập được mã hoá hai đầu khi có thể.
  • Lưu mã thông báo thay vì tên người dùng và mật khẩu.
  • Loại bỏ phiền hà khỏi luồng đăng nhập.
  • Giúp người dùng không phải lo lắng về việc quản lý mật khẩu phức tạp.
  • Google xác minh danh tính của người dùng.

Trước khi bắt đầu

Để chuẩn bị cho ứng dụng của bạn, hãy hoàn tất các bước trong những phần sau.

Định cấu hình ứng dụng

Trong tệp build.gradle cấp dự án, hãy thêm kho lưu trữ Maven của Google vào cả hai mục buildscriptallprojects:

buildscript {
  repositories {
    google()
    mavenCentral()
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
  }
}

Thêm phần phụ thuộc Dịch vụ Google Play dành cho API Block Store vào tệp bản dựng Gradle của mô-đun, thường là app/build.gradle:

dependencies {
  implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}

Cách hoạt động

Chặn cửa hàng là một cơ chế đăng nhập dựa trên mã thông báo được mã hoá hai đầu và được xây dựng dựa trên cơ sở hạ tầng sao lưu và khôi phục. Các bước sau đây trình bày cách hoạt động của một ứng dụng sử dụng Block Store:

  1. Trong quy trình xác thực của ứng dụng hoặc bất cứ lúc nào sau đó, bạn có thể lưu trữ mã xác thực của người dùng vào Block Store để truy xuất sau này.
  2. Mã thông báo sẽ được lưu trữ trên thiết bị và cũng có thể được sao lưu lên đám mây, mã hoá hai đầu khi có thể.
  3. Dữ liệu được chuyển khi người dùng bắt đầu quy trình khôi phục trên thiết bị mới.
  4. Nếu người dùng khôi phục ứng dụng trong quá trình khôi phục, thì ứng dụng của bạn có thể truy xuất mã thông báo đã lưu từ Block Store trên thiết bị mới.

Đang lưu mã thông báo

Khi người dùng đăng nhập vào ứng dụng, bạn có thể lưu mã thông báo xác thực mà bạn tạo cho người dùng đó để Chặn cửa hàng. Bạn có thể thực hiện việc này bằng cách gọi setBytes() trên một bản sao của StoreBytesData.Builder để lưu trữ thông tin xác thực của người dùng vào thiết bị nguồn. Sau khi bạn lưu mã thông báo bằng Block Store, mã thông báo sẽ được mã hoá và lưu trữ trên thiết bị.

Mẫu sau đây cho biết cách lưu mã thông báo xác thực vào thiết bị cục bộ:

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)
        }

Truy xuất mã thông báo

Sau đó, khi người dùng thực hiện quy trình khôi phục trên thiết bị mới, trước tiên, các dịch vụ của Google Play sẽ xác minh người dùng, sau đó truy xuất dữ liệu Chặn cửa hàng của bạn. Người dùng đã đồng ý khôi phục dữ liệu ứng dụng của bạn trong quá trình khôi phục nên không cần phải có sự đồng ý bổ sung. Khi người dùng mở ứng dụng, bạn có thể yêu cầu mã thông báo từ Block Store bằng cách gọi retrieveBytes(). Sau đó, bạn có thể sử dụng mã thông báo đã truy xuất để duy trì trạng thái đăng nhập của người dùng trên thiết bị mới.

Mẫu sau đây cho biết cách truy xuất mã thông báo được mã hoá đã được lưu trữ trước đó bằng 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)
            }
}

Mã hóa hai đầu

Để mã hoá hai đầu được cung cấp, thiết bị phải chạy Android 9 trở lên và người dùng phải thiết lập phương thức khoá màn hình (mã PIN, hình mở khoá hoặc mật khẩu) cho thiết bị. Bạn có thể xác minh xem tính năng mã hoá có dùng được trên thiết bị hay không bằng cách gọi isEndToEndEncryptionAvailable().

Mẫu sau đây cho biết cách xác minh liệu tính năng mã hoá có dùng được trong quá trình sao lưu trên đám mây hay không:

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

Bật tính năng sao lưu trên đám mây

Để bật tính năng sao lưu trên đám mây, hãy thêm phương thức setShouldBackupToCloud() vào đối tượng StoreBytesData. Block Store sẽ sao lưu định kỳ vào đám mây các byte được lưu trữ khi setShouldBackupToCloud() được đặt thành true.

Mẫu sau đây cho biết cách bật tính năng sao lưu trên đám mây chỉ khi tính năng sao lưu trên đám mây được mã hoá hai đầu:

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.")
          }
        }

Cách kiểm tra

Hãy sử dụng các phương thức sau trong quá trình phát triển để kiểm thử flow.

Gỡ cài đặt/cài đặt lại cùng một thiết bị

Nếu người dùng bật Dịch vụ sao lưu (bạn có thể kiểm tra các dịch vụ này trong phần Cài đặt và gt; Google > Sao lưu), thì dữ liệu Chặn cửa hàng vẫn được duy trì khi gỡ cài đặt/cài đặt lại ứng dụng.

Bạn có thể làm theo các bước sau để kiểm tra:

  1. Tích hợp API BlockStore vào ứng dụng kiểm thử của bạn.
  2. Hãy dùng ứng dụng kiểm thử để gọi API BlockStore để lưu trữ dữ liệu của bạn.
  3. Gỡ cài đặt ứng dụng thử nghiệm, sau đó cài đặt lại ứng dụng đó trên cùng một thiết bị.
  4. Hãy dùng ứng dụng kiểm thử để gọi API BlockStore để truy xuất dữ liệu của bạn.
  5. Xác minh rằng các byte được truy xuất giống với byte được lưu trữ trước khi gỡ cài đặt.

Thiết bị với các thiết bị khác

Trong hầu hết các trường hợp, bạn sẽ phải đặt lại thiết bị mục tiêu về trạng thái ban đầu. Sau đó, bạn có thể truy cập luồng khôi phục không dây Android hoặc khôi phục cáp của Google (đối với các thiết bị được hỗ trợ).

Khôi phục đám mây

  1. Tích hợp API Blockstore vào ứng dụng kiểm thử của bạn. Bạn cần gửi ứng dụng kiểm thử đến Cửa hàng Play.
  2. Trên thiết bị nguồn, hãy dùng ứng dụng kiểm thử để gọi API Blockstore để lưu trữ dữ liệu, trong đó shouldBackUpToCloud được đặt thành true.
  3. Đối với các thiết bị từ phiên bản O trở lên, bạn có thể kích hoạt tính năng sao lưu trên đám mây của Block Store theo cách thủ công: chuyển đến phần Settings > Google > Backup (Sao lưu và sao lưu) rồi nhấp vào nút “Sao lưu ngay”.
    1. Để xác minh rằng tính năng sao lưu trên đám mây của Block Store đã thành công, bạn có thể:
      1. Sau khi sao lưu xong, hãy tìm các dòng nhật ký bằng thẻ “CloudSyncBpTkSvc”.
      2. Bạn sẽ thấy các dòng như sau: “......, CloudSyncBpTkSvc: sync Kết quả: SUCCESS, ..., đã tải lên kích thước: XXX byte ...”
    2. Sau quá trình sao lưu trên đám mây của Block Store, khoảng thời gian "làm mát" là 5 phút. Trong vòng 5 phút, việc nhấp vào nút “Sao lưu ngay” sẽ không kích hoạt một tính năng sao lưu trên đám mây khác của Block Store.
  4. Đặt lại thiết bị mục tiêu về trạng thái ban đầu và thực hiện quy trình khôi phục trên đám mây. Chọn để khôi phục ứng dụng kiểm thử trong quy trình khôi phục. Để biết thêm thông tin về quy trình khôi phục đám mây, hãy xem Quy trình khôi phục đám mây được hỗ trợ.
  5. Trên thiết bị mục tiêu, hãy sử dụng ứng dụng kiểm thử để gọi API Blockstore để truy xuất dữ liệu của bạn.
  6. Xác minh rằng các byte được truy xuất giống với byte được lưu trữ trong thiết bị nguồn.

Yêu cầu về thiết bị

Mã hoá hai đầu

  • Tính năng mã hoá hai đầu được hỗ trợ trên các thiết bị chạy Android 9 (API 29) trở lên.
  • Thiết bị phải đặt phương thức khoá màn hình bằng mã PIN, hình mở khoá hoặc mật khẩu để bật tính năng mã hoá hai đầu và mã hoá chính xác dữ liệu của người dùng.

Quy trình khôi phục thiết bị

Để khôi phục thiết bị, bạn cần phải có thiết bị nguồn và thiết bị mục tiêu. Đây sẽ là 2 thiết bị đang truyền dữ liệu.

Thiết bị nguồn phải chạy Android 6 (API 23) trở lên để sao lưu.

Các thiết bị target chạy Android 9 (API 29) trở lên có khả năng khôi phục.

Bạn có thể tìm thêm thông tin về quy trình khôi phục thiết bị sang thiết bị tại đây.

Quy trình Sao lưu và khôi phục trên đám mây

Quá trình sao lưu và khôi phục trên đám mây sẽ cần thiết bị nguồn và thiết bị đích.

Thiết bị nguồn phải chạy Android 6 (API 23) trở lên để sao lưu.

Những thiết bị mục tiêu được hỗ trợ dựa trên các nhà cung cấp thiết bị. Các thiết bị Pixel có thể dùng tính năng này trên Android 9 (API 29) và tất cả các thiết bị khác phải chạy Android 12 (API 31) trở lên.