الخطوة 3: التعامل مع قيم مَعلمة Remote Config في رمز تطبيقك
المقدمة: تحسين AdMob معدّل تكرار الإعلان باستخدام Firebase |
الخطوة 1: استخدام AdMob لإنشاء صيغ جديدة للوحدات الإعلانية بغرض الاختبار |
الخطوة 2: إعداد تجربة أ/ب في وحدة تحكّم Firebase |
الخطوة 3: التعامل مع قيم المَعلمة Remote Config في رمز تطبيقك |
الخطوة 4: ابدأ الاختبار أ/ب وراجِع نتائج الاختبار في وحدة تحكّم Firebase. |
الخطوة 5: تحديد ما إذا كنت تريد طرح شكل الإعلان الجديد |
في نهاية الخطوة الأخيرة، أنشأت مَعلمة Remote Config
(INTERSTITIAL_AD_KEY
). في هذه الخطوة، ستضيف المنطق إلى رمز تطبيقك
لتحديد ما يجب أن يعرضه تطبيقك استنادًا إلى قيمة هذه المَعلمة.
إضافة حِزم تطوير البرامج (SDK) المطلوبة
قبل استخدام Remote Config في رمز تطبيقك، أضِف كلًّا من حزمة تطوير البرامج (SDK) لنظام التشغيل Remote Config وحزمة تطوير البرامج (SDK) لمنصّة Google Analytics إلى ملفات إنشاء مشروعك.
Swift
أضِف مجموعات الإعلانات المتسلسلة التالية وثبِّتها في ملف podfile:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Objective-C
أضِف مجموعات الإعلانات المتسلسلة التالية وثبِّتها في ملف podfile:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Android
أضِف مكتبات الاعتماد التالية إلى ملف build.gradle
:
implementation 'com.google.android.gms:play-services-ads:23.6.0'
implementation 'com.google.firebase:firebase-analytics:22.1.2'
implementation 'com.google.firebase:firebase-config:22.0.1'
Unity
نزِّل حزمة Firebase Unity SDK وثبِّتها، ثم أضِف حِزم Unity التالية إلى مشروعك:
FirebaseAnalytics.unitypackage
FirebaseRemoteConfig.unitypackage
ضبط مثيل Remote Config
لاستخدام قيم مَعلمة Remote Config، اضبط الإصدار الافتراضى من Remote Config على استرجاع قيم جديدة لنسخة تطبيق العميل الافتراضية.
في هذا المثال، تم ضبط Remote Config للبحث عن قيم مَعلمات جديدة مرة واحدة كل ساعة.
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
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");
}
استرجاع Remote Config وتفعيله
استرِجع مَعلمات Remote Config وفعِّلها حتى تتمكّن من بدء استخدام قيم المَعلمات الجديدة.
ستحتاج إلى إجراء هذا الطلب في أسرع وقت ممكن خلال مرحلة تحميل التطبيق لأنّ هذا الطلب يكون غير متزامن. ستحتاج أيضًا إلى استرجاع قيمة Remote Config بشكل مُسبق حتى يتمكّن تطبيقك من معرفة الإعلان الذي سيعرضه.
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
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();
});
أصبح تطبيقك جاهزًا الآن للتعامل مع المَعلمة Remote Config التي أنشأتها أثناء إعداد اختبار أ/ب في وقت سابق من هذا الدليل التعليمي.
استخدام قيمة المَعلمة Remote Config
استخدِم قيمة Remote Config التي تم استرجاعها مسبقًا في الدالة loadAdUnit()
لتحديد شكل معدّل تكرار الإعلانات الذي يجب عرضه لنسخة التطبيق الافتراضية هذه.
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
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);
}
إضافة عمليات تحقّق أخرى لقيمة المَعلمة
هناك مناطق أخرى في رمز تطبيقك حيث عليك التحقّق من قيمة المَعلمة Remote Config لتحديد تجربة الإعلان التي سيتم تحميلها. على سبيل المثال، يمكنك تحديد ما إذا كنت تريد إعادة تحميل إعلان بعد أن ينتهي المستخدِم من مشاهدة الإعلان الحالي.
يجب إجراء طلبَي الجلب والتنشيط أولاً للحصول على أيّ قيم مَعلمة تتغيّر، على سبيل المثال، إذا قرّرت إنهاء تجربة جديدة أو إنشاؤها.
من هناك، يمكنك دائمًا التحقّق من قيمة المَعلمة باستخدام الطلبات التالية:
Swift
remoteConfig["INTERSTITIAL_AD_KEY"].stringValue
Objective-C
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
Java
mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)
Kotlin
remoteConfig.getString(INTERSTITIAL_AD_KEY)
Unity
remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue
ستعيد هذه الطلبات دائمًا القيمة نفسها لمثيل التطبيق استنادًا إلى ما إذا تم وضعه في مجموعة التحكّم أو إحدى مجموعات الصيغ الإعلانية الجديدة، ما لم يتم إجراء أي تغييرات في وحدة تحكّم Firebase تم جلبها وتفعيلها في الطلبات السابقة.
Firebase الخطوة 2: إعداد اختبار أ/ب في وحدة تحكّم الخطوة 4: بدء اختبار أ/ب ومراجعة نتائج الاختبار