Bước 3: Xử lý các giá trị tham số Remote Config trong mã của ứng dụng
Giới thiệu: Tối ưu hoá AdMob tần suất quảng cáo bằng Firebase |
Bước 1: Sử dụng AdMob để tạo các biến thể của đơn vị quảng cáo mới để thử nghiệm |
Bước 2: Thiết lập thử nghiệm A/B trong bảng điều khiển Firebase |
Bước 3: Xử lý các giá trị tham số Remote Config trong mã của ứng dụng |
Bước 4: Bắt đầu thử nghiệm A/B và xem xét kết quả thử nghiệm trong bảng điều khiển Firebase |
Bước 5: Quyết định có triển khai định dạng quảng cáo mới hay không |
Ở cuối bước cuối cùng, bạn đã tạo một thông số Remote Config
(INTERSTITIAL_AD_KEY
). Ở bước này, bạn sẽ thêm logic vào mã của ứng dụng
cho nội dung mà ứng dụng của bạn sẽ hiển thị dựa trên giá trị của tham số đó.
Thêm các SDK bắt buộc
Trước khi sử dụng Remote Config trong mã xử lý ứng dụng, hãy thêm cả hai thuộc tính SDK Remote Config và Firebase SDK cho Google Analytics để các tệp bản dựng dự án của bạn.
Swift
Thêm và cài đặt các nhóm sau trong tệp pod của bạn:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Objective-C
Thêm và cài đặt các nhóm sau trong tệp pod của bạn:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Android
Thêm các phần phụ thuộc thư viện sau đây vào tệp build.gradle
:
implementation 'com.google.android.gms:play-services-ads:23.3.0'
implementation 'com.google.firebase:firebase-analytics:22.1.0'
implementation 'com.google.firebase:firebase-config:22.0.0'
Unity
Tải xuống và cài đặt Firebase Unity SDK, sau đó thêm Unity sau đây vào dự án của bạn:
FirebaseAnalytics.unitypackage
FirebaseRemoteConfig.unitypackage
Định cấu hình thực thể Remote Config
Để sử dụng các giá trị tham số Remote Config, hãy định cấu hình thực thể Remote Config để có thể tìm nạp các giá trị mới cho thuộc tính phiên bản ứng dụng khách.
Trong ví dụ này, Remote Config được định cấu hình để kiểm tra tham số mới giá trị mỗi giờ một lần.
Swift
remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings
Objective-C
self.remoteConfig = [FIRRemoteConfig remoteConfig];
FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
remoteConfigSettings.minimumFetchInterval = 3600;
self.remoteConfig.configSettings = remoteConfigSettings;
Java
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(3600)
.build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Kotlin+KTX
remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)
Unity
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
var configSettings = new ConfigSettings {
MinimumFetchInternalInMilliseconds =
(ulong)(new TimeSpan(1, 0, 0).TotalMilliseconds)
};
remoteConfig.SetConfigSettingsAsync(configSettings)
.ContinueWithOnMainThread(task => {
Debug.Log("Config settings confirmed");
}
Tìm nạp và kích hoạt Remote Config
Tìm nạp và kích hoạt các tham số Remote Config để có thể bắt đầu sử dụng các giá trị thông số mới.
Bạn nên thực hiện lệnh gọi này càng sớm càng tốt trong giai đoạn tải của ứng dụng vì lệnh gọi này không đồng bộ và bạn sẽ cần giá trị Remote Config tìm nạp trước để ứng dụng của bạn biết quảng cáo nào sẽ hiển thị.
Swift
remoteConfig.fetch() { (status, error) -> Void in
if status == .success {
print("Config fetched!")
self.remoteConfig.activate() { (changed, error) in
// ...
}
} else {
print("Config not fetched")
print("Error: \(error?.localizedDescription ?? "No error available.")")
}
self.loadAdUnit()
}
Objective-C
[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
if (status == FIRRemoteConfigFetchStatusSuccess) {
NSLog(@"Config fetched!");
[self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
// ...
}];
} else {
NSLog(@"Config not fetched");
NSLog(@"Error %@", error.localizedDescription);
}
[self loadAdUnit];
}];
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);
} else {
Log.d(TAG, "Config params failed to update");
}
loadAdUnit();
}
});
Kotlin+KTX
remoteConfig.fetchAndActivate()
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
val updated = task.result
Log.d(TAG, "Config params updated: $updated")
} else {
Log.d(TAG, "Config params failed to update")
}
loadAdUnit()
}
Unity
remoteConfig.FetchAndActivateAsync().ContinueWithOnMainThread(task => {
if (task.IsFaulted) {
Debug.LogWarning("Config params failed to update");
} else {
Debug.Log("Config params updated: " + task.Result);
}
LoadAdUnit();
});
Ứng dụng của bạn hiện đã sẵn sàng xử lý tham số Remote Config mà bạn đã tạo trong quá trình thiết lập thử nghiệm A/B trước đó của hướng dẫn này.
Sử dụng giá trị thông số Remote Config
Sử dụng giá trị Remote Config được tìm nạp trước trong hàm loadAdUnit()
để
xác định biến thể tần suất quảng cáo nào sẽ xuất hiện cho phiên bản ứng dụng này.
Swift
private func loadAdUnit() {
let adUnitId = remoteConfig["INTERSTITIAL_AD_KEY"].stringValue;
let request = GADRequest()
GADInterstitialAd.load(withAdUnitID: adUnitId,
request: request,
completionHandler: { [self] ad, error in
if let error = error {
print("Failed to load: \(error.localizedDescription)")
return
}
interstitial = ad
// Register for callbacks.
}
)
}
// Register for callbacks.
Objective-C
- (void)loadAdUnit {
NSString *adUnitId =
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
GADRequest *request = [GADRequest request];
[GADInterstitialAd loadAdWithAdUnitId:adUnitId
request:request
completionHandler:^(GADInterstitialAd *ad,
NSError *error) {
if (error) {
NSLog(@"Failed to load interstitial ad with error: %@",
[error localizedDescription]);
return;
}
self.interstitial = ad;
}];
}
Java
private void loadAdUnit() {
String adUnitId =
mFirebaseRemoteConfig.getString("INTERSTITIAL_AD_KEY");
// Load Interstitial Ad (assume adUnitId not null)
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(this, adUnitId, adRequest, new
InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd intertitialAd) {
mInterstitialAd = interstitialAd;
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
mInterstitialAd = null;
}
});
}
Kotlin+KTX
private fun loadAdUnit() {
String adUnitId = remoteConfig.getString("INTERSTITIAL_AD_KEY")
var adRequest = AdRequestBuilder.Builder().build()
AdRequestBuilder.load(this, adUnitId, adRequest, object :
InterstitialAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
mInterstitialAd = null
}
override fun onAdLoaded(interstitialAd: InterstitialAd) {
mInterstitialAd = interstitialAd
}
})
}
Unity
void LoadAdUnit() {
// Note that you may want to encode and parse two sets of ad unit IDs for
// Android / iOS in the Unity implementation.
String adUnitId = remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue;
this.interstitial = new InterstitialAd(adUnitId);
}
Thêm các bước kiểm tra khác cho giá trị thông số
Có các khu vực khác trong mã xử lý ứng dụng của bạn nơi bạn sẽ cần phải kiểm tra giá trị của thông số Remote Config này để cho biết trải nghiệm quảng cáo nào sẽ đã tải xong. Ví dụ: bạn có thể quyết định xem có tải lại quảng cáo sau khi người dùng đã đã xem xong kênh hiện tại.
Bạn phải thực hiện lệnh gọi tìm nạp và kích hoạt trước để nhận giá trị thông số bất kỳ thay đổi — ví dụ: nếu bạn quyết định kết thúc hoặc tạo một thử nghiệm mới.
Từ đó, bạn luôn có thể kiểm tra giá trị của thông số này bằng cách sử dụng các lệnh gọi sau:
Swift
remoteConfig["INTERSTITIAL_AD_KEY"].stringValue
Objective-C
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
Java
mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)
Kotlin+KTX
remoteConfig.getString(INTERSTITIAL_AD_KEY)
Unity
remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue
Các lệnh gọi này sẽ luôn trả về cùng một giá trị cho một phiên bản ứng dụng, tuỳ thuộc vào liệu quảng cáo đó được đặt trong nhóm đối chứng hay một trong các nhóm biến thể quảng cáo mới, trừ phi có bất kỳ thay đổi nào được thực hiện trong bảng điều khiển Firebase mà hệ thống đã tìm nạp và đã kích hoạt trong các cuộc gọi trước đó.
Firebase Bước 2: Thiết lập thử nghiệm A/B trong bảng điều khiển của Bước 4: Bắt đầu thử nghiệm A/B và xem kết quả thử nghiệm