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

Lần cập nhật gần đây nhất: ngày 9 tháng 03 năm 2021

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 mà không mất phí. Khi sử dụng Cấu hình từ xa, bạn tạo các giá trị mặc định trong ứng dụng để kiểm soát hành vi 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ụ trợ 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 trong cơ sở người dùng của bạn. Ứ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, đồng thời có thể thường xuyên kiểm tra các bản cập nhật và á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ị thông 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 các giá trị mới được kích hoạt để các giá trị đó ảnh hưởng đến trải nghiệm người dùng của ứng dụng. Việc này giúp bạn bảo vệ trải nghiệm trong ứng dụng của mình bằng cách kiểm soát thời gian của bất kỳ thay đổi nào.

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

Để ghi đè các giá trị mặc định trong ứng dụng, bạn cần sử dụng bảng điều khiển của Firebase hoặc API phụ trợ Cấu hình từ xa để tạo các thông số có cùng tên với các thông số dùng trong ứng dụng của bạn. Đố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 những phiên bản ứng dụng đáp ứng những điều kiện nhất định. Hình này minh hoạ cách ưu tiên các giá trị thông số trong phần phụ trợ Cấu hình từ xa và trong ứng dụng của bạn:

61f12f33d2ac3133.pngs

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 các giá trị mà không cần cập nhật ứng dụng của bạn

Bạn cần có

  • Phiên bản mới nhất của Android Studio
  • 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 của bạn
  • 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ẽ xây dựng ứng dụng kiểm thử của riêng mình, nhưng 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ã nguồn 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 thư mục gốc có tên 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 config android_studio_folder.png.

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

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

5f90353b0b519642.pngS

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 phần "Configure Your Project" (Định cấu hình dự án của bạn) màn hình:
  4. Đặt tên cho dự án. Tên gói và Vị trí lưu sẽ được tạo tự động 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 của bạn

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 dự án Firebase để kết nối với ứng dụng iOS của mình. Hãy đọc 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 Thêm dự án, sau đó chọn hoặc nhập Tên dự án. 910158221fe46223.pngS

Nếu đang có một dự án Google Cloud Platform (GCP), thì bạn có thể chọn dự án đó từ 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 dự án mới, bạn có thể chỉnh sửa 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 mục Tìm hiểu dự án Firebase để tìm hiểu cách Firebase sử dụng mã dự án.

  1. Nhấp vào Tiếp tục.
  2. Thiết lập Google Analytics cho dự án của bạn để có được trải nghiệm tối ưu khi sử dụng bất kỳ sản phẩm Firebase nào sau đây:
  • 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 tài khoản Google Analytics hiện có hoặc tạo tài khoản mới. Nếu bạn chọn tạo tài khoản mới, hãy chọn vị trí báo cáo Analytics, sau đó chấp nhận chế độ cài đặt chia sẻ dữ liệu và điều khoản của Google Analytics cho dự án của bạn.

1282a798556779ab.png.

48ade68c8de27d2.pngS

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

Firebase tự động cấp tài nguyên cho dự án Firebase của bạn. Khi quá trình này 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 của bạn với Firebase

Sau 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 xem 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ểm cần lưu ý khi thêm ứng dụng vào dự án Firebase, bao gồm cả cách xử lý nhiều biến thể bản dựng.

  1. Chuyển đến 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 để bắt đầu 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 Thêm ứng dụng để hiển thị các lựa chọn về 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 Biệt hiệu của ứng dụng.
  5. Để trống trường SHA-1 vì dự án này không bắt buộc phải dùng SHA-1.
  6. Nhấp vào Đă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 xuống tệp cấu hình 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 Tải google-services.json xuống để lấy tệp cấu hình Android của Firebase (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 cho các Dịch vụ của Google vào. Hãy kiểm tra để đảm bảo rằng 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 tệp Gradle (cấp ứng dụng) trong mô-đun của bạn (thường là app/build.gradle), hãy áp dụng trình bổ trợ Gradle cho Dịch vụ của Google:

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

áp dụng plugin: ‘com.android.application'

// Thêm dòng sau:

apply plugin: ‘com.google.gms.google-services' // Trình bổ trợ Dịch vụ của Google

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ó điều kiện các phiên bản ứng dụng đến thuộc tính người dùng và đối tượng. Hãy 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, khai báo phần phụ thuộc cho thư viện Cấu hình từ xa Android trong tệp Gradle (ở cấp ứng dụng) (thường là app/build.gradle) trong mô-đun của bạn. Bằng cách sử dụng Firebase Android BoM, ứng dụng của bạn sẽ luôn sử dụng các 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 của mình. Trong phần phụ thuộc, hãy thêm 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 ứng dụng của bạn có thể sử dụng tất cả các phần phụ thuộc, hãy đồng bộ hoá dự án với các tệp gradle bằng cách chọn File > (Tệp >) Đồng bộ hoá dự án với tệp Gradle.

4. Xem xét các thành phần chính của 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. Bạn đã hoàn tất các bước này trong đoạn mã của lớp học lập trình bắt đầu nhanh. Vui lòng dùng phần này khi xem xét mã của lớp học lập trình bắt đầu nhanh để nắm được điều gì đang xảy ra.

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

Tải một bản sao đố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 qua phần phụ trợ và kiểm soát thời điểm các giá trị đã tìm nạp được cung cấp cho ứng dụng của bạn.

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ị thông số mặc định trong ứng dụng

Bạn có thể đặt giá trị thông 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ự kiến trước khi kết nối với phần phụ trợ Cấu hình từ xa, và để có sẵn các giá trị mặc định 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 thông số và giá trị thông số mặc định bằng cách sử dụng đối tượng Map (Bản đồ) 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 một tệp XML để xác định tên và giá trị thông số mặc định. Sau đây là cách tạo một tệp XML của riêng bạn:

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

4b8a2a637a626e94.pngS

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

358b4ba740120ece.png.

  1. Đặt các 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 cách sử dụng setDefaultsAsync(int), như minh hoạ:

MainActivity.java

mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

3. Nhận các giá trị thông số để sử dụng trong ứng dụng của bạn

Bây giờ, bạn có thể nhận các giá trị thông số từ đối tượng Cấu hình từ xa. Nếu bạn thiết lập các giá trị trong phần phụ trợ, tìm nạp rồi kích hoạt các giá trị, thì ứng dụng của bạn có thể sử dụng những giá trị đó. Nếu không, bạn sẽ nhận được các giá trị thông 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ạ tới loại dữ liệu mà ứng dụng của bạn dự kiến, 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 các giá trị thông số qua phần phụ trợ 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. Để ứng dụng của bạn có thể sử dụng các giá trị thông số đã tìm nạp, hãy gọi phương thức activate(). Đối với các trường hợp mà 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 findAndKích hoạt() để tìm nạp các giá trị từ phần phụ trợ 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ị thông số đã cập nhật này ảnh hưởng đến hành vi 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 cùng một lúc để đảm bảo người dùng có được trải nghiệm mượt mà, chẳng hạn như vào lần tiếp theo người dùng mở ứng dụng của bạn. 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ẽ được điều tiết và SDK sẽ trả về FirebaseRemoteConfigFetchThrottledException. Trước SDK phiên bản 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ó nhiều giới hạn thoải mái hơn).

Trong quá trình phát triển ứng dụng, bạn nên tìm nạp và kích hoạt các cấu hình rất thường xuyên (nhiều lần mỗi giờ) để có thể nhanh chóng lặp lại quá trình phát triển và kiểm thử ứng dụng. Để phù hợp với việc lặp lại nhanh trong 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 của mình.

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ờ, tức là hệ thống sẽ không tìm nạp cấu hình qua phần phụ trợ nhiều lần trong khoảng thời gian 12 giờ, bất kể thực tế có bao nhiêu lệnh gọi tìm nạp. 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 của 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 thông số mặc định trong ứng dụng

Mở res/xml/remote_config_defaults.xml và thay đổi 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 việc thay đổi giá trị mặc định trong ứng dụng

  1. Chạy dự án trong trình mô phỏng hoặc sử dụng thiết bị kiểm thử để 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 tin nhắn chào mừng trong chế độ xem chính.

4c838bf5a629d5b8.pngS

Đặt giá trị thông số trong phần phụ trợ Cấu hình từ xa

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

  1. Mở bảng điều khiển của Firebase, mở dự án của bạn.
  2. Chọn Cấu hình từ xa từ trình đơn bên trái trong phần Engage để xem trang tổng quan Cấu hình từ xa.
  3. Trong mục Thêm thông số, hãy nhập Parameter key. Trong mục Default value, hãy thêm bất kỳ văn bản nào bạn muốn. Sau đó, hãy nhấp vào Thêm thông 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á thông số

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

Nội dung mô tả

loading_phrase

Đang tìm nạp cấu hình...

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

welcome_message_caps

false

Boolean; Nếu đúng, hãy thay đổi Welcome_message thành viết hoa toàn bộ

welcome_message

Chào mừng bạn đến với ứng dụng tuyệt vời của tôi!

String; Thông báo chào mừng

Ảnh chụp màn hình ví dụ:

28fa48f18da43002.pngS

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

cfe900477549adb7.png

  1. Thông báo chào mừng sẽ được cập nhật dựa trên các giá trị và thông số 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 Cấu hình từ xa thành công để thay đổi tin nhắn chào mừng! Có nhiều cách khác để sử dụng Cấu hình từ xa để thay đổi và tuỳ chỉnh ứng dụng. Vui lòng xem các tài nguyên khác bên dưới: