אפשר להשתמש ב-Firebase Remote Config כדי להגדיר פרמטרים באפליקציה ולעדכן את הערכים שלהם בענן, וכך לשנות את המראה וההתנהגות של לאפליקציה מבלי להפיץ עדכון לאפליקציה. במדריך הזה נסביר איך מתחילים ומספקים כמה דוגמאות לקוד. כל הקוד הזה זמין לשכפול או להורדה מהמאגר firebase/quickstart-android ב-GitHub.
שלב 1: מוסיפים את Firebase ואת ה-SDK של הגדרת התצורה מרחוק לאפליקציה
אם עדיין לא עשיתם זאת, מוסיפים את Firebase לפרויקט Android.
ב-Remote Config, Google Analytics נדרש לטירגוט המותנה של מופעי האפליקציה למאפייני משתמשים ולקהלים. חשוב לוודא שמפעילים את Google Analytics בפרויקט.
בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל
<project>/<app-module>/build.gradle.kts
או<project>/<app-module>/build.gradle
), מוסיפים את התלות בספריית Remote Config ל-Android. מומלץ להשתמש Firebase Android BoM כדי לשלוט בניהול גרסאות של ספריות.בנוסף, כחלק מתהליך ההגדרה של Analytics, צריך להוסיף את Firebase SDK של Google Analytics לאפליקציה שלך.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.4.0")) // Add 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") }
באמצעות Firebase Android BoM, האפליקציה שלכם תשתמש תמיד בגרסאות תואמות של ספריות Android של Firebase.
(חלופה) מוסיפים יחסי תלות לספריות של Firebase בלי להשתמש ב-BoM
אם בוחרים שלא להשתמש במאפיין Firebase BoM, צריך לציין כל גרסה של ספריית Firebase בשורת התלות שלו.
שימו לב: אם האפליקציה שלכם משתמשת במספר ספריות של Firebase, מומלץ מומלץ להשתמש בפקודה BoM כדי לנהל גרסאות של ספריות, וכך להבטיח שכל הגרסאות תואמת.
dependencies { // Add the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-config:22.0.0") implementation("com.google.firebase:firebase-analytics:22.1.2") }
שלב 2: אחזור של אובייקט singleton Remote Config
מקבלים מופע של אובייקט Remote Config ומגדירים את מרווח הזמן המינימלי לאחזור כדי לאפשר רענון בתדירות גבוהה:
Kotlin+KTX
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
אובייקט היחיד משמש לאחסון ערכי ברירת המחדל של הפרמטרים באפליקציה, לאחזור ערכי פרמטרים מעודכנים מהקצה העורפי ולשליטה במועד שבו הערכים שאוחזרו יהיו זמינים לאפליקציה.
במהלך הפיתוח מומלץ להגדיר אחזור מינימלי נמוך יחסית למרווח זמן. לעיון במאמר ויסות נתונים (throttle) אפשר לקבל מידע נוסף.
שלב 3: הגדרת ערכי ברירת המחדל של הפרמטרים באפליקציה
אפשר להגדיר ערכי ברירת מחדל של פרמטרים באפליקציה באובייקט Remote Config, כדי שהאפליקציה תפעל כמצופה לפני שהיא מתחברת לקצה העורפי של Remote Config, וכדי שערכי ברירת המחדל יהיו זמינים אם לא הוגדרו ערכי ברירת מחדל בקצה העורפי.
מגדירים קבוצה של שמות פרמטרים וערכי ברירת מחדל של פרמטרים באמצעות מיפוי של אובייקט או קובץ משאב XML מאוחסנים בתיקייה
res/xml
של האפליקציה שלך. באפליקציית הדוגמה למדריך למתחילים Remote Config נעשה שימוש בקובץ XML כדי להגדיר שמות וערכים של פרמטרים שמוגדרים כברירת מחדל.אם כבר הגדרתם Remote Config ערכי פרמטרים של הקצה העורפי, אפשר להוריד קובץ XML שנוצר שמכיל את כל ערכי ברירת המחדל לשמור אותה בספריית
res/xml
של האפליקציה:REST
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=XML -o remote_config_defaults.xml
Firebase console
בקטע פרמטרים פותחים את התפריט. בוחרים באפשרות הורדה של ערכי ברירת מחדל.
כשמוצגת בקשה, מפעילים את האפשרות .xml for Android ולוחצים על Download file.
מוסיפים את הערכים האלה לאובייקט Remote Config באמצעות
setDefaultsAsync(int)
, כפי שמוצג:Kotlin+KTX
remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
שלב 4: מקבלים ערכי פרמטרים לשימוש באפליקציה
עכשיו אפשר לקבל ערכי פרמטרים מהאובייקט Remote Config. אם מגדירים ערכים בקצה העורפי, מאחזרים אותם ואז מפעילים אותם, הערכים האלה יהיו זמינים לאפליקציה. אחרת, תקבלו את ערכי הפרמטרים באפליקציה שהוגדרו באמצעות setDefaultsAsync(int)
.
כדי לקבל את הערכים האלה, צריך להפעיל את השיטה שמפורטת בהמשך, שממפה לסוג הנתונים שצפוי באפליקציה, ומספקים את מפתח הפרמטר כארגומנטים:
שלב 5: הגדרת ערכי הפרמטרים בקצה העורפי של Remote Config
באמצעות המסוף של Firebase או Remote Config ממשקי API לקצה העורפי, אפשר ליצור ערכי ברירת מחדל חדשים בצד השרת שיעקפו את הערכים בתוך האפליקציה בהתאם ללוגיקה המותנית או לטירגוט המשתמשים הרצוי. הקטע הזה מתארת את השלבים במסוף Firebase כדי ליצור את הערכים האלה.
- פותחים את הפרויקט במסוף Firebase.
- בתפריט, בוחרים באפשרות Remote Config כדי להציג את לוח הבקרה Remote Config.
- הגדרת פרמטרים עם שמות זהים לפרמטרים שהגדרתם באפליקציה שלך. לכל פרמטר אפשר להגדיר ערך ברירת מחדל (שהוא בסופו של דבר יבטל את ערך ברירת המחדל התואם בתוך האפליקציה), ואפשר גם להגדיר ערכים מותנים. מידע נוסף זמין במאמר פרמטרים ותנאים של Remote Config.
שלב 6: מאחזרים ומפעילים ערכים
- כדי לאחזר ערכי פרמטרים מהקצה העורפי של Remote Config, צריך להפעיל את השיטה
fetch()
. כל הערכים שתגדירו בקצה העורפי יאוחזרו ויאוחסנו באובייקט Remote Config. כדי שערכי הפרמטרים שאוחזרו יהיו זמינים לאפליקציה, צריך להפעיל את השיטה
activate()
.במקרים שבהם רוצים לאחזר ולהפעיל ערכים בקריאה אחת, אפשר להשתמש בבקשה
fetchAndActivate()
כדי לאחזר ערכים מקצה העורפי Remote Config ולהפוך אותם לזמינים לאפליקציה:Kotlin+KTX
remoteConfig.fetchAndActivate() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { val updated = task.result Log.d(TAG, "Config params updated: $updated") Toast.makeText( this, "Fetch and activate succeeded", Toast.LENGTH_SHORT, ).show() } else { Toast.makeText( this, "Fetch failed", Toast.LENGTH_SHORT, ).show() } displayWelcomeMessage() }
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(); } });
מאחר שערכים מעודכנים של פרמטרים משפיעים על ההתנהגות והמראה של האפליקציה, כדאי להפעיל את הערכים שאוחזרו בזמן שמבטיח חוויה חלקה למשתמש, למשל בפעם הבאה שהמשתמש יפתח את האפליקציה. למידע נוסף ולדוגמאות, אפשר לעיין במאמר אסטרטגיות טעינה של Remote Config.
שלב 7: האזנה לעדכונים בזמן אמת
אחרי שאתם מאחזרים את ערכי הפרמטרים, אתם יכולים להשתמש ב-Remote Config בזמן אמת כדי להאזין לעדכונים מהקצה העורפי של Remote Config. זמן אמת אותות של Remote Config למכשירים מחוברים כשיש עדכונים זמינים אחזור אוטומטי של השינויים אחרי פרסום Remote Config חדש .
עדכונים בזמן אמת נתמכים ב-SDK של Firebase עבור Android בגרסה 21.3.0 ואילך (Firebase BoM v31.2.4 ואילך).
באפליקציה, משתמשים ב-
addOnConfigUpdateListener()
כדי להתחיל להאזין לעדכונים ולשלוף באופן אוטומטי ערכים חדשים של פרמטרים. מטמיעים את הפונקציה החוזרת (callback)onUpdate()
כדי להפעיל את ההגדרות המעודכנות.Kotlin+KTX
remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener { override fun onUpdate(configUpdate : ConfigUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.updatedKeys); if (configUpdate.updatedKeys.contains("welcome_message")) { remoteConfig.activate().addOnCompleteListener { displayWelcomeMessage() } } } override fun onError(error : FirebaseRemoteConfigException) { Log.w(TAG, "Config update error with code: " + error.code, error) } })
Java
mFirebaseRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() { @Override public void onUpdate(ConfigUpdate configUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.getUpdatedKeys()); mFirebaseRemoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() { @Override public void onComplete(@NonNull Task<Boolean> task) { displayWelcomeMessage(); } }); } @Override public void onError(FirebaseRemoteConfigException error) { Log.w(TAG, "Config update error with code: " + error.getCode(), error); } });
בפעם הבאה שתפרסמו גרסה חדשה של Remote Config, המכשירים שפועלת בהם האפליקציה ומקשיבים לשינויים יפעילו את
ConfigUpdateListener
.
ויסות נתונים (throttle)
אם אפליקציה מאחזרת יותר מדי פעמים בפרק זמן קצר, שיחות אחזור
מווסתת (throttle) וה-SDK מחזיר
FirebaseRemoteConfigFetchThrottledException
לפני גרסה 17.0.0 של ה-SDK,
המגבלה הייתה 5 בקשות לאחזור ב-60 דקות
חלון (בגרסאות חדשות יותר יש מגבלות פחות מחמירות).
במהלך פיתוח האפליקציה, כדאי לאחזר ולהפעיל הגדרות
לעיתים קרובות (הרבה פעמים בשעה) כדי לאפשר לכם לבצע במהירות איטרציה ככל שהפיתוח
לבדוק את האפליקציה. עדכוני Remote Config בזמן אמת עוקפים באופן אוטומטי את
המטמון כאשר ההגדרה מתעדכנת בשרת. כדי לבצע חזרות מהירות בפרויקט עם עד 10 מפתחים, אפשר להגדיר באפליקציה באופן זמני אובייקט FirebaseRemoteConfigSettings
עם מרווח אחזור מינימלי נמוך (setMinimumFetchIntervalInSeconds
).
מרווח האחזור המינימלי שמוגדר כברירת מחדל ל-Remote Config הוא 12 שעות, כלומר לא יתבצע אחזור של הגדרות מהקצה העורפי יותר מפעם אחת בחלון של 12 שעות, ללא קשר למספר הקריאות לאחזור שבוצעו בפועל. באופן ספציפי, מרווח האחזור המינימלי נקבע לפי הסדר הבא:
- הפרמטר ב-
fetch(long)
- הפרמטר ב-
FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
- ערך ברירת המחדל של 12 שעות
כדי להגדיר את מרווח האחזור המינימלי לערך מותאם אישית, משתמשים ב-FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)
.
השלבים הבאים
אם עדיין לא עשיתם זאת, כדאי לעיין בRemote Configתרחישים לדוגמה ולקרוא את המסמכים בנושא מושגים מרכזיים ואסטרטגיות מתקדמות, כולל: