Các phương pháp hay nhất để tìm nạp Cấu hình từ xa một cách hiệu quả

Firebase Remote Config giúp bạn linh hoạt kiểm soát hành vi và giao diện của ứng dụng. Nhờ đó, bạn có thể triển khai các tính năng và thử nghiệm A/B trên nhiều nền tảng cho ứng dụng mà không cần triển khai phiên bản mới hoặc cập nhật nhiều cửa hàng ứng dụng.

Cho dù bạn đang tạo bản minh hoạ, điều hành một công ty khởi nghiệp đang phát triển hay quản lý một ứng dụng doanh nghiệp trên quy mô lớn, thì việc quản lý khối lượng tìm nạp mạng là yếu tố then chốt để mang lại trải nghiệm nhanh chóng và thích ứng cho người dùng. Việc quản lý cấu hình hiệu quả giúp giảm độ trễ khi khởi động nguội, tiết kiệm dữ liệu và mức sử dụng pin của ứng dụng, đồng thời ngăn chặn mức hao tổn mạng không cần thiết. Ngoài ra, nếu cơ sở người dùng của bạn mở rộng nhanh chóng và làm tăng mức sử dụng trong tương lai, thì việc đơn giản hoá quá trình tích hợp Remote Config sẽ giúp đảm bảo mức sử dụng của bạn luôn hiệu quả.

Bạn có thể giảm đáng kể lưu lượng truy cập yêu cầu mạng phía máy khách bằng cách tinh chỉnh cách thức và thời điểm ứng dụng tìm nạp tham số cũng như thời điểm ứng dụng kích hoạt tham số.

Chuyển sang mẫu "tìm nạp cho phiên tiếp theo"

Một mẫu phổ biến cần tránh là sử dụng lệnh gọi fetchAndActivate (vừa tìm nạp giá trị mới qua mạng vừa kích hoạt các giá trị đó) mỗi khi khởi chạy ứng dụng, kết hợp với thời gian hết hạn ngắn của bộ nhớ đệm cho các giá trị đã tìm nạp trước đó (ví dụ: 15 phút đến một giờ). Mô hình tư duy đằng sau phương pháp này là mỗi khi người dùng mở ứng dụng, họ luôn có các giá trị mới nhất được tìm nạp và áp dụng. Mặc dù có những lúc cần cập nhật ngay lập tức (ví dụ: chạy chiến dịch bán hàng hằng ngày hoặc quảng cáo trò chơi), nhưng bạn cần cân bằng mục tiêu đó với tác động đến hiệu suất của ứng dụng và mức sử dụng tính năng tìm nạp.

Phương pháp này buộc các lệnh gọi mạng mới mỗi khi bộ nhớ đệm hết hạn, tạo ra lượng tìm nạp cao cho những người dùng mở ứng dụng nhiều lần trong ngày.

Thay vào đó, hãy cân nhắc sử dụng riêng các lệnh gọi fetch và activate với khoảng thời gian tìm nạp tối thiểu cao hơn để áp dụng mô hình "tìm nạp cho phiên tiếp theo". Bạn vẫn có thể sử dụng fetchAndActivate với khoảng thời gian tìm nạp tối thiểu cao hơn vì fetch chỉ thực thi yêu cầu mạng nếu bộ nhớ đệm không hợp lệ, nhưng việc sử dụng riêng hai lệnh gọi này sẽ giúp củng cố mẫu và thiết lập mẫu này làm phương pháp tiêu chuẩn trong quy trình phát triển ứng dụng của bạn. Ngoài ra, bằng cách kích hoạt riêng, bạn sẽ không gặp rủi ro khi áp dụng các giá trị cấu hình giữa phiên và làm gián đoạn trải nghiệm người dùng.

Cách hoạt động của phương pháp này

  • Kích hoạt ngay khi khởi chạy: Áp dụng ngay các cấu hình được lưu vào bộ nhớ đệm từ phiên trước (độ trễ mạng 0 mili giây).
  • Tìm nạp trong nền với bộ nhớ đệm lâu hơn (ví dụ: hơn 12 hoặc 24 giờ): Yêu cầu cấu hình đã cập nhật không đồng bộ để làm mới bộ nhớ đệm cục bộ cho phiên tiếp theo.

Cách tối ưu hoá khối lượng tìm nạp

Khoảng thời gian tìm nạp tối thiểu dài hơn sẽ dẫn đến ít yêu cầu tìm nạp hơn. Việc tìm nạp các giá trị mới cho phiên tiếp theo và kích hoạt các giá trị được lưu vào bộ nhớ đệm cho phiên hiện tại có nghĩa là ứng dụng của bạn sẽ tải ngay lập tức từ bộ nhớ đệm cục bộ trong một khoảng thời gian xác thực dài hơn, nhờ đó mang lại trải nghiệm tốt hơn cho người dùng.

Ví dụ: nếu bạn đặt minimumFetchInterval thành 24 giờ và người dùng mở ứng dụng của bạn 5 hoặc 10 lần trong một ngày, thì SDK sẽ tự động đáp ứng các lần khởi chạy từ 2 đến 10 trực tiếp từ bộ nhớ đệm cục bộ, giúp giảm số lượng yêu cầu mạng hằng ngày của người dùng đó từ 10 lần tìm nạp trở lên xuống còn 1 lần.

Các ví dụ sau đây cho thấy cách triển khai này cho Android, nền tảng của Apple và ứng dụng web:

Android

val remoteConfig = Firebase.remoteConfig

// Set a 24-hour minimum fetch interval (86,400 seconds)
val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 86400
}
remoteConfig.setConfigSettingsAsync(configSettings)

// 1. Instantly activate values cached from the LAST session
remoteConfig.activate().addOnCompleteListener {
    applyAppConfigurations()
}

// 2. Fetch new values in the background for the NEXT session
remoteConfig.fetch().addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Optional: Activate values if needed
    }
}

iOS+

let remoteConfig = RemoteConfig.remoteConfig()

// Set a 24-hour minimum fetch interval (86,400 seconds)
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 86400
remoteConfig.configSettings = settings

// 1. Instantly activate values cached from the LAST session
remoteConfig.activate { changed, error in
    guard error == nil else { return }
    DispatchQueue.main.async {
        self.applyAppConfigurations()
    }
}

// 2. Fetch new values in the background for the NEXT session
remoteConfig.fetch { status, error in
    if status == .success {
        // Optional: Activate values if needed
    }
}

Web

import { getRemoteConfig, fetchConfig, activate } from "firebase/remote-config";

const remoteConfig = getRemoteConfig(app);

// Set a 24-hour minimum fetch interval (86,400,000 ms)
remoteConfig.settings.minimumFetchIntervalMillis = 86400000;

// 1. Instantly activate values cached from the LAST session
activate(remoteConfig).then(() => {
    applyAppConfigurations();
});

// 2. Fetch new values in the background for the NEXT session
fetchConfig(remoteConfig).then(() => {
    // Optional: Activate values if needed
});

Triển khai tính năng tìm nạp "thông minh" có điều kiện

Nếu mẫu "tìm nạp cho phiên tiếp theo" gây ra quá nhiều độ trễ giữa thời điểm bạn cần cập nhật các giá trị Remote Config và thời điểm các giá trị đó có sẵn trong ứng dụng khách, hãy cân nhắc áp dụng tính năng tìm nạp "thông minh" có điều kiện.

Để triển khai hiệu quả, hãy tránh đính kèm trình kích hoạt fetch vào các trình kích hoạt vòng đời giao diện người dùng rộng, chẳng hạn như mỗi khi màn hình tải, chuyển đổi thẻ hoặc chế độ xem được lấy tiêu điểm.

Thay vào đó, hãy kích hoạt yêu cầu tìm nạp một cách có chọn lọc dựa trên các hành động hoặc trạng thái rõ ràng của ứng dụng, chẳng hạn như:

  • Sự kiện đăng nhập của người dùng
  • Chuyển đổi sang các luồng người dùng cụ thể nơi các tham số của bạn được sử dụng (ví dụ: nhập phễu quy trình thanh toán hoặc lên cấp trong trò chơi)

Ngược lại, hãy tránh kích hoạt yêu cầu tìm nạp cho các hành động thông thường như:

  • Khi người dùng mở ứng dụng hoặc bắt đầu một phiên mới
  • Khi ứng dụng chuyển đổi giữa trạng thái nền và trạng thái nền trước

Các bước tiếp theo