الخطوة 3: التعامل مع قيم مَعلمات "الإعداد عن بُعد" في رمز تطبيقك
مقدّمة: تحسين معدّل تكرار إعلانات AdMob باستخدام Firebase |
الخطوة 1: استخدام AdMob لإنشاء صيغ جديدة للوحدات الإعلانية من أجل الاختبار |
الخطوة 2: إعداد اختبار أ/ب في وحدة تحكُّم Firebase |
الخطوة 3: التعامل مع قيم مَعلمات "الإعداد عن بُعد" في رمز تطبيقك |
الخطوة 4: بدء اختبار أ/ب ومراجعة نتائج الاختبار في وحدة تحكّم Firebase |
الخطوة 5: تحديد ما إذا كنت ستطرح شكل الإعلان الجديد |
في نهاية الخطوة الأخيرة، أنشأت مَعلمة "الإعداد عن بُعد"
(INTERSTITIAL_AD_KEY
). في هذه الخطوة، عليك إضافة المنطق إلى رمز تطبيقك بخصوص ما يجب أن يعرضه تطبيقك استنادًا إلى قيمة تلك المَعلمة.
إضافة حِزم تطوير البرامج (SDK) المطلوبة
قبل استخدام ميزة "الإعداد عن بُعد" في رمز تطبيقك، أضِف كلاً من حزمة تطوير البرامج (SDK) الخاصة بالإعداد عن بُعد وحزمة تطوير البرامج (SDK) لمنصّة Firebase الخاصة بخدمة "إحصاءات Google" إلى ملفات تصميم مشروعك.
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.2.0'
implementation 'com.google.firebase:firebase-analytics:22.0.2'
implementation 'com.google.firebase:firebase-config:22.0.0'
Unity
نزِّل حزمة تطوير البرامج (SDK) لمنصّة Firebase Unity وثبِّتها، ثم أضِف حِزم Unity التالية إلى مشروعك:
FirebaseAnalytics.unitypackage
FirebaseRemoteConfig.unitypackage
ضبط النسخة الافتراضية من ميزة "الإعداد عن بُعد"
لاستخدام قيم مَعلمات "الإعداد عن بُعد"، اضبط مثيل "الإعداد عن بُعد" ليتم إعداده لاسترجاع قيم جديدة لمثيل تطبيق العميل.
في هذا المثال، تم ضبط ميزة "الإعداد عن بُعد" للبحث عن قيم المَعلمات الجديدة مرة كل ساعة.
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");
}
استرجاع إعدادات ميزة "الإعداد عن بُعد" وتفعيلها
يمكنك جلب مَعلمات "الإعداد عن بُعد" وتفعيلها لبدء استخدام قيم المَعلمات الجديدة.
سيلزمك إجراء هذه المكالمة في أقرب وقت ممكن في مرحلة تحميل تطبيقك لأن هذا الاستدعاء غير متزامن وستحتاج إلى جلب قيمة "الإعداد عن بُعد" مسبقًا حتى يعرف تطبيقك الإعلان الذي سيتم عرضه.
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();
});
تطبيقك جاهز الآن للتعامل مع معلمة "الإعداد عن بُعد" التي أنشأتها أثناء اختبار A/B الذي أعددته سابقًا في هذا البرنامج التعليمي.
استخدام قيمة مَعلمة "الإعداد عن بُعد"
استخدِم قيمة "الإعداد عن بُعد" التي تم استرجاعها مسبقًا في دالة 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+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);
}
إضافة عمليات تحقّق أخرى لقيمة المَعلمة
هناك أجزاء أخرى في رمز التطبيق ستحتاج إلى التحقّق من قيمة مَعلمة "الإعداد عن بُعد" هذه لتحديد تجربة الإعلانات التي سيتم تحميلها. على سبيل المثال، يمكنك تحديد ما إذا كنت تريد إعادة تحميل الإعلان بعد انتهاء المستخدم من مشاهدة الإعلان الحالي.
يجب إجراء استدعاءات الجلب والتفعيل أولاً للحصول على أي تغييرات في قيمة المعلمة - على سبيل المثال، إذا قررت إنهاء تجربة جديدة أو إنشائها.
ومن هناك، يمكنك دائمًا التحقق من قيمة المعلمة باستخدام الطلبات التالية:
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
ستعرض هذه الطلبات دائمًا القيمة نفسها لمثيل تطبيق بناءً على ما إذا كان قد تم وضعه في مجموعة التحكّم أو في إحدى مجموعات الصيغ الإعلانية الجديدة، ما لم يتم إجراء أي تغييرات في "وحدة تحكُّم Firebase" تم جلبها وتفعيلها في الطلبات السابقة.
الخطوة 2: إعداد اختبار أ/ب في "وحدة تحكُّم Firebase"الخطوة 4: بدء اختبار أ/ب ومراجعة نتائج الاختبار