Tích hợp Cấu hình từ xa trên lớp học lập trình Android

1. Giới thiệu

Cập nhật lần gần đây nhất: 2021-03-09

Cấu hình từ xa Firebase là gì?

Cấu hình từ xa Firebase là một dịch vụ đám mây, cho phép bạn thay đổi cách hoạt động và giao diện của ứng dụng mà không cần yêu cầu người dùng tải bản cập nhật ứng dụng xuống (miễn phí). Khi sử dụng Cấu hình từ xa, bạn có thể tạo các giá trị mặc định trong ứng dụng để kiểm soát hoạt động và giao diện của ứng dụng. Sau đó, bạn có thể sử dụng bảng điều khiển của Firebase hoặc API phần phụ trợ của Cấu hình từ xa để ghi đè các giá trị mặc định trong ứng dụng cho tất cả người dùng ứng dụng hoặc cho các phân khúc người dùng. Ứng dụng của bạn kiểm soát thời điểm áp dụng các bản cập nhật và có thể thường xuyên kiểm tra các bản cập nhật cũng như áp dụng các bản cập nhật đó với tác động không đáng kể đến hiệu suất.

Tính năng này hoạt động ra sao?

Cấu hình từ xa bao gồm một thư viện ứng dụng xử lý các tác vụ quan trọng như tìm nạp giá trị tham số và lưu vào bộ nhớ đệm, đồng thời vẫn cho phép bạn kiểm soát thời điểm kích hoạt các giá trị mới để chúng ảnh hưởng đến trải nghiệm người dùng của ứng dụng. Điều này cho phép bạn bảo vệ trải nghiệm ứng dụng bằng cách kiểm soát thời điểm thực hiện mọi thay đổi.

Các phương thức get của thư viện ứng dụng Cấu hình từ xa cung cấp một điểm truy cập duy nhất cho các giá trị tham số. Ứng dụng của bạn nhận các giá trị phía máy chủ bằng cùng một logic mà ứng dụng dùng để nhận các giá trị mặc định trong ứng dụng. Vì vậy, bạn có thể thêm các chức năng của Cấu hình từ xa vào ứng dụng mà không cần viết nhiều mã.

Để ghi đè các giá trị mặc định trong ứng dụng, bạn hãy sử dụng bảng điều khiển của Firebase hoặc API phần phụ trợ của Cấu hình từ xa để tạo các tham số có cùng tên với các tham số được dùng trong ứng dụng. Đối với mỗi tham số, bạn có thể đặt một giá trị mặc định phía máy chủ để ghi đè giá trị mặc định trong ứng dụng. Bạn cũng có thể tạo các giá trị có điều kiện để ghi đè giá trị mặc định trong ứng dụng cho các phiên bản ứng dụng đáp ứng một số điều kiện nhất định. Hình ảnh này cho thấy cách các giá trị tham số được ưu tiên trong phần phụ trợ của Cấu hình từ xa và trong ứng dụng:

61f12f33d2ac3133.png

Kiến thức bạn sẽ học được

  • Cách triển khai Cấu hình từ xa Firebase
  • Cách sử dụng Cấu hình từ xa Firebase để thay đổi giá trị mà không cần cập nhật ứng dụng

Bạn cần có

  • Phiên bản mới nhất của Android Studio
  • Một tài khoản Firebase
  • (nên dùng nhưng không bắt buộc) Một thiết bị Android thực để chạy ứng dụng
  • Kiến thức cơ bản về Java hoặc Kotlin

2. Bắt đầu thiết lập

(Không bắt buộc) Tải mã mẫu xuống

Trong lớp học lập trình này, bạn sẽ tạo ứng dụng kiểm thử của riêng mình. Tuy nhiên, nếu muốn xem và chạy ứng dụng mẫu hiện có, bạn có thể tải mã mẫu bắt đầu nhanh xuống.

Nhấp vào nút sau đây để tải toàn bộ mã cho lớp học lập trình này:

Giải nén tệp zip đã tải xuống. Thao tác này sẽ giải nén một thư mục gốc có tên là quickstart-android-master.

...hoặc sao chép kho lưu trữ GitHub từ dòng lệnh.

$ git clone https://github.com/firebase/quickstart-android.git

Kho lưu trữ chứa nhiều thư mục. Chúng ta sẽ sử dụng thư mục android_studio_folder.png config.

(Không bắt buộc) Nhập mã mẫu

Khởi chạy Android Studio, chọn "Import project" (Nhập dự án) trong màn hình chào mừng. Sau đó, mở thư mục đã tải xuống và chọn thư mục android_studio_folder.png config. Sau đó, nhấp vào "open" (mở).

5f90353b0b519642.png

Tạo dự án Android mới

  1. Trong Android Studio, hãy bắt đầu dự án mới
  2. Chọn Hoạt động cơ bản
  3. Trong màn hình "Configure Your Project" (Định cấu hình dự án):
  4. Đặt tên cho dự án. Tên gói và Vị trí lưu sẽ được tự động tạo cho bạn.
  5. Ngôn ngữ: Java
  6. SDK tối thiểu 16

3. Thêm Firebase và Firebase Analytics vào dự án Android

Tạo dự án Firebase

Trước khi có thể thêm Firebase vào ứng dụng Android, bạn cần tạo một dự án Firebase để kết nối với ứng dụng iOS. Hãy truy cập vào bài viết Tìm hiểu về các dự án Firebase để tìm hiểu thêm về các dự án Firebase.

  1. Trong bảng điều khiển của Firebase, hãy nhấp vào Add project (Thêm dự án), sau đó chọn hoặc nhập Project name (Tên dự án). 910158221fe46223.png

Nếu có một dự án Google Cloud Platform (GCP) hiện có, bạn có thể chọn dự án đó trong trình đơn thả xuống để thêm tài nguyên Firebase vào dự án đó.

  1. (Không bắt buộc) Nếu đang tạo một dự án mới, bạn có thể chỉnh sửa Project ID (Mã dự án).

Firebase tự động chỉ định một mã nhận dạng duy nhất cho dự án Firebase của bạn. Hãy truy cập vào bài viết Tìm hiểu về các dự án Firebase để tìm hiểu về cách Firebase sử dụng mã dự án.

  1. Nhấp vào Continue (Tiếp tục).
  2. Thiết lập Google Analytics cho dự án của bạn. Việc này cho phép bạn có trải nghiệm tối ưu khi sử dụng bất kỳ sản phẩm nào sau đây của Firebase:
  • Firebase Crashlytics
  • Dự đoán Firebase
  • Giải pháp gửi thông báo qua đám mây của Firebase
  • Tính năng gửi thông báo trong ứng dụng của Firebase
  • Cấu hình từ xa Firebase
  • Thử nghiệm A/B trong Firebase

Khi được nhắc, hãy chọn sử dụng một tài khoản Google Analytics hiện có hoặc tạo một tài khoản mới. Nếu chọn tạo một tài khoản mới, hãy chọn vị trí báo cáo Analytics, sau đó chấp nhận các cài đặt cách chia sẻ dữ liệu và điều khoản của Google Analytics cho dự án của bạn.

1282a798556779ab.png

48ade68c8de27d2.png

  1. Nhấp vào Create project (Tạo dự án) (hoặc Add Firebase (Thêm Firebase) nếu bạn đang sử dụng một dự án GCP hiện có).

Firebase tự động cung cấp tài nguyên cho dự án Firebase của bạn. Khi quá trình hoàn tất, bạn sẽ được đưa đến trang tổng quan cho dự án Firebase trong bảng điều khiển của Firebase.

Đăng ký ứng dụng với Firebase

Khi có một dự án Firebase, bạn có thể thêm ứng dụng Android của mình vào dự án đó.

Hãy truy cập vào bài viết Tìm hiểu về các dự án Firebase để tìm hiểu thêm về các phương pháp hay nhất và những điều cần cân nhắc khi thêm ứng dụng vào một dự án Firebase, bao gồm cả cách xử lý nhiều biến thể bản dựng.

  1. Truy cập vào bảng điều khiển của Firebase.
  2. Ở đầu trang Tổng quan về dự án, hãy nhấp vào biểu tượng Android để chạy quy trình thiết lập. Nếu bạn đã thêm một ứng dụng vào dự án Firebase, hãy nhấp vào Add app (Thêm ứng dụng) để hiển thị các lựa chọn nền tảng.
  3. Nhập tên gói của ứng dụng vào trường Android package name (Tên gói Android).
  4. (Không bắt buộc) Nhập App nickname (Biệt danh ứng dụng).
  5. Để trống trường SHA-1 vì không bắt buộc phải có SHA-1 cho dự án này.
  6. Nhấp vào Register app (Đăng ký ứng dụng).

Thêm tệp cấu hình Firebase

Tiếp theo, bạn sẽ được nhắc tải một tệp cấu hình xuống. Tệp này chứa tất cả siêu dữ liệu Firebase cần thiết cho ứng dụng của bạn. Nhấp vào Download google-services.json (Tải google-services.json xuống) để lấy tệp cấu hình Firebase Android (google-services.json).

bc8ec7d3c9a28d75.png

a99b7415462dfc8b.png

Trong tệp Gradle cấp dự án (build.gradle), hãy thêm các quy tắc để đưa trình bổ trợ Gradle của Dịch vụ Google vào. Kiểm tra để đảm bảo bạn cũng có kho lưu trữ Maven của Google.

Tệp build.gradle cấp dự án (<project>/build.gradle):

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.5'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}

Trong mô-đun tệp Gradle (cấp ứng dụng) (thường là app/build.gradle), hãy áp dụng trình bổ trợ Gradle của Dịch vụ Google:

Tệp build.gradle cấp ứng dụng (<project>/<app-module>/build.gradle):

apply plugin: ‘com.android.application'

// Add the following line:

apply plugin: ‘com.google.gms.google-services' // Google Services plugin

android {

// ...

}

Thêm Firebase SDK vào ứng dụng Android

Đối với Cấu hình từ xa, bạn phải sử dụng Google Analytics để nhắm mục tiêu các phiên bản ứng dụng đến thuộc tính người dùng và đối tượng một cách có điều kiện. Nhớ bật Google Analytics trong dự án của bạn.

(Việc này đã được thực hiện trong mã bắt đầu nhanh mẫu)

Sử dụng Firebase Android BoM (Bảng kê khai thành phần của Firebase cho Android), hãy khai báo phần phụ thuộc cho thư viện Cấu hình từ xa trên Android trong mô-đun tệp Gradle (cấp ứng dụng) (thường là app/build.gradle). Bằng cách sử dụng Firebase Android BoM (Bảng kê khai thành phần của Firebase cho Android), ứng dụng của bạn sẽ luôn sử dụng những phiên bản tương thích của thư viện Android trên Firebase.

Ngoài ra, trong quá trình thiết lập Analytics, bạn cần thêm Firebase SDK cho Google Analytics vào ứng dụng. Trong phần phụ thuộc, hãy thêm đoạn mã sau:

app/build.gradle

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:26.6.0')

    // Declare the dependencies for the Remote Config and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-config'
    implementation 'com.google.firebase:firebase-analytics'
}

Đồng bộ hoá dự án với các tệp gradle

Để đảm bảo rằng tất cả các phần phụ thuộc đều có sẵn cho ứng dụng, hãy đồng bộ hoá dự án với các tệp gradle bằng cách chọn File > Sync Project with Gradle Files.

4. Xem lại các thành phần chính cho Cấu hình từ xa

Bây giờ, chúng ta sẽ xem xét các bước sử dụng Cấu hình từ xa trong một ứng dụng. Các bước này đã được hoàn tất trong mã lớp học lập trình bắt đầu nhanh. Vui lòng sử dụng phần này trong khi xem xét mã lớp học lập trình bắt đầu nhanh để hiểu điều gì đang diễn ra.

1. Tải đối tượng singleton Cấu hình từ xa

Tải một thực thể đối tượng Cấu hình từ xa và đặt khoảng thời gian tìm nạp tối thiểu để cho phép làm mới thường xuyên:

MainActivity.java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

Đối tượng singleton được dùng để lưu trữ các giá trị tham số mặc định trong ứng dụng, tìm nạp các giá trị tham số đã cập nhật từ phần phụ trợ và kiểm soát thời điểm cung cấp các giá trị đã tìm nạp cho ứng dụng.

Trong quá trình phát triển, bạn nên đặt khoảng thời gian tìm nạp tối thiểu tương đối thấp. Xem phần Điều tiết để biết thêm thông tin.

2. Đặt giá trị tham số mặc định trong ứng dụng

Bạn có thể đặt giá trị tham số mặc định trong ứng dụng trong đối tượng Cấu hình từ xa để ứng dụng hoạt động như dự định trước khi kết nối với phần phụ trợ của Cấu hình từ xa và để các giá trị mặc định có sẵn nếu không có giá trị nào được đặt trong phần phụ trợ.

Bạn có thể xác định một tập hợp tên tham số và giá trị tham số mặc định bằng cách sử dụng đối tượng Map hoặc tệp tài nguyên XML được lưu trữ trong thư mục res/xml của ứng dụng. Ứng dụng mẫu bắt đầu nhanh Cấu hình từ xa sử dụng tệp XML để xác định tên và giá trị tham số mặc định. Sau đây là cách bạn có thể tạo tệp XML của riêng mình:

  1. Tạo thư mục xml trong thư mục res.

4b8a2a637a626e94.png

  1. Nhấp chuột phải vào thư mục xml mới tạo và tạo một tệp.

358b4ba740120ece.png

  1. Đặt giá trị mặc định. Trong phần tiếp theo, bạn sẽ thử thay đổi các giá trị mặc định trong tệp XML bắt đầu nhanh Cấu hình từ xa.
  2. Thêm các giá trị này vào đối tượng Cấu hình từ xa bằng setDefaultsAsync(int), như minh hoạ:

MainActivity.java

mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

3. Nhận giá trị tham số để sử dụng trong ứng dụng

Bây giờ, bạn có thể nhận giá trị tham số từ đối tượng Cấu hình từ xa. Nếu bạn đặt giá trị trong phần phụ trợ, tìm nạp các giá trị đó rồi kích hoạt, thì các giá trị đó sẽ có sẵn cho ứng dụng của bạn. Nếu không, bạn sẽ nhận được các giá trị tham số trong ứng dụng được định cấu hình bằng setDefaultsAsync(int). Để nhận các giá trị này, hãy gọi phương thức được liệt kê bên dưới, phương thức này ánh xạ đến kiểu dữ liệu mà ứng dụng của bạn mong đợi, cung cấp khoá tham số làm đối số:

4. Tìm nạp và kích hoạt các giá trị

  1. Để tìm nạp giá trị tham số từ phần phụ trợ của Cấu hình từ xa, hãy gọi phương thức fetch(). Mọi giá trị mà bạn đặt trong phần phụ trợ đều được tìm nạp và lưu trữ trong đối tượng Cấu hình từ xa.
  2. Để cung cấp các giá trị tham số đã tìm nạp cho ứng dụng, hãy gọi phương thức activate(). Trong trường hợp bạn muốn tìm nạp và kích hoạt các giá trị trong một lệnh gọi, bạn có thể sử dụng yêu cầu fetchAndActivate() để tìm nạp các giá trị từ phần phụ trợ của Cấu hình từ xa và cung cấp các giá trị đó cho ứng dụng:

MainActivity.java

mFirebaseRemoteConfig.fetchAndActivate()
        .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
            @Override
            public void onComplete(@NonNull Task<Boolean> task) {
                if (task.isSuccessful()) {
                    boolean updated = task.getResult();
                    Log.d(TAG, "Config params updated: " + updated);
                    Toast.makeText(MainActivity.this, "Fetch and activate succeeded",
                            Toast.LENGTH_SHORT).show();

                } else {
                    Toast.makeText(MainActivity.this, "Fetch failed",
                            Toast.LENGTH_SHORT).show();
                }
                displayWelcomeMessage();
            }
        });

Vì các giá trị tham số đã cập nhật này ảnh hưởng đến cách hoạt động và giao diện của ứng dụng, nên bạn cần kích hoạt các giá trị đã tìm nạp vào thời điểm đảm bảo trải nghiệm mượt mà cho người dùng, chẳng hạn như lần tiếp theo người dùng mở ứng dụng của bạn. Hãy xem Chiến lược tải Cấu hình từ xa để biết thêm thông tin và ví dụ.

Điều tiết

Nếu một ứng dụng tìm nạp quá nhiều lần trong một khoảng thời gian ngắn, thì các lệnh gọi tìm nạp sẽ bị điều tiết và SDK sẽ trả về FirebaseRemoteConfigFetchThrottledException. Trước phiên bản SDK 17.0.0, giới hạn là 5 yêu cầu tìm nạp trong khoảng thời gian 60 phút (các phiên bản mới hơn có giới hạn cho phép nhiều hơn).

Trong quá trình phát triển ứng dụng, bạn có thể muốn tìm nạp và kích hoạt cấu hình rất thường xuyên (nhiều lần mỗi giờ) để cho phép bạn lặp lại nhanh chóng khi phát triển và kiểm thử ứng dụng. Để đáp ứng việc lặp lại nhanh chóng trên một dự án có tối đa 10 nhà phát triển, bạn có thể tạm thời đặt đối tượng FirebaseRemoteConfigSettings có khoảng thời gian tìm nạp tối thiểu thấp (setMinimumFetchIntervalInSeconds) trong ứng dụng.

Khoảng thời gian tìm nạp tối thiểu mặc định cho Cấu hình từ xa là 12 giờ. Điều này có nghĩa là cấu hình sẽ không được tìm nạp từ phần phụ trợ nhiều hơn một lần trong khoảng thời gian 12 giờ, bất kể số lượng lệnh gọi tìm nạp thực tế được thực hiện. Cụ thể, khoảng thời gian tìm nạp tối thiểu được xác định theo thứ tự sau:

  1. Tham số trong fetch(long)
  2. Tham số trong FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
  3. Giá trị mặc định là 12 giờ

Để đặt khoảng thời gian tìm nạp tối thiểu thành một giá trị tuỳ chỉnh, hãy sử dụng FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long).

5. Thay đổi hành vi của ứng dụng bằng Cấu hình từ xa

Thay đổi các tham số mặc định trong ứng dụng

Mở res/xml/remote_config_defaults.xml và thay đổi các giá trị mặc định thành giá trị khác.

res/xml/remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- START xml_defaults -->
<defaultsMap>
    <entry>
        <key>loading_phrase</key>
        <value>Fetching config...</value>
    </entry>
    <entry>
        <key>welcome_message_caps</key>
        <value>false</value>
    </entry>
    <entry>
        <key>welcome_message</key>
        <value>Welcome to my awesome app!</value>
    </entry>
</defaultsMap>
    <!-- END xml_defaults -->

Xác minh thay đổi giá trị mặc định trong ứng dụng

  1. Chạy dự án trong một trình mô phỏng hoặc sử dụng thiết bị thử nghiệm để xác nhận hành vi.
  2. Nhấp vào Open (Mở) trên phiên bản Java hoặc Kotlin.

c1582b989c25ced.png

  1. Xem lại thông điệp chào mừng trên chế độ xem chính.

4c838bf5a629d5b8.png

Đặt giá trị tham số trong phần phụ trợ của Cấu hình từ xa

Bây giờ, hãy kiểm thử việc gửi giá trị thông qua Cấu hình từ xa. Bằng cách sử dụng bảng điều khiển của Firebase hoặc API phần phụ trợ của Cấu hình từ xa, bạn có thể tạo các giá trị mặc định mới phía máy chủ để ghi đè các giá trị trong ứng dụng theo logic có điều kiện hoặc nhắm mục tiêu đến người dùng mà bạn muốn. Phần này mô tả các bước trong bảng điều khiển của Firebase để tạo các giá trị này.

  1. Mở bảng điều khiển của Firebase, mở dự án của bạn.
  2. Chọn Remote Config (Cấu hình từ xa) trong trình đơn bên trái ở phần Engage (Tương tác) để xem trang tổng quan Cấu hình từ xa.
  3. Trong phần Add a parameter (Thêm tham số), hãy nhập Parameter key. (Khoá tham số). Trong phần Default value (Giá trị mặc định), hãy thêm bất kỳ văn bản nào bạn muốn. Sau đó, nhấp vào Add Parameter (Thêm tham số). Đối với lớp học lập trình này, chúng ta sẽ sử dụng các khoá tham số trong tệp res/xml/remote_config_defaults.xml. Hãy xem bảng bên dưới để biết thông tin chi tiết:

Khoá tham số

Giá trị mặc định (remote_config_defaults.xml)

Nội dung mô tả

loading_phrase

Fetching config...

Chuỗi; Hiển thị khi tìm nạp giá trị Cấu hình từ xa.

welcome_message_caps

false

Boolean; Nếu là true, hãy thay đổi welcome_message thành tất cả chữ hoa

welcome_message

Welcome to my awesome app!

Chuỗi; Thông điệp chào mừng

Ảnh chụp màn hình mẫu:

28fa48f18da43002.png

  1. Khi bạn đã thêm xong các tham số, hãy nhấp vào "Publish Changes" (Xuất bản thay đổi).
  2. Chạy lại ứng dụng trên một trình mô phỏng hoặc thiết bị rồi nhấp vào nút "Fetch Remote Welcome" (Tìm nạp thông điệp chào mừng từ xa) lần này.

cfe900477549adb7.png

  1. Thông điệp chào mừng sẽ được cập nhật dựa trên tham số và giá trị Cấu hình từ xa của bạn!

6. Xin chúc mừng

Xin chúc mừng! Bạn đã sử dụng thành công Cấu hình từ xa để thay đổi thông điệp chào mừng! Có nhiều cách khác để sử dụng Cấu hình từ xa nhằm thay đổi và tuỳ chỉnh ứng dụng. Vui lòng xem các tài nguyên bổ sung bên dưới: