AdMob+Firebase 102 ב-Android: משפרים את התנהגות האפליקציה ללא עדכון

1. מבוא

נניח שצריך לשנות את הערכים של פרמטרים מסוימים באפליקציה לאחר פרסום האפליקציה בחנות Play. בדרך כלל, יש לפרסם מחדש גרסה חדשה של האפליקציה, וגם המשתמשים צריכים לעדכן את האפליקציה גם בטלפון שלהם.

באופן כללי, עדכון האפליקציה יפעל אם ברצונך לבצע שינוי ארוך טווח באפליקציה. אבל מה קורה אם אתם מתכוונים לשנות את הערך של פרמטרים מסוימים באפליקציה לעיתים קרובות? לחלופין, מה קורה אם רוצים להפעיל כמה ניסויים כדי למצוא את ההגדרה האופטימלית של האפליקציה?

במקרים כאלה, עדכוני האפליקציה לא יפעלו כמו שצריך. מכיוון שנדרש זמן מה עד שהעדכון יופץ במלואו למשתמשים. בנוסף, לא פשוט להפעיל את הניסויים בכמה גרסאות של האפליקציה.

בנוסף, איך אפשר לקבוע אם התהליך שעובר המשתמש באפליקציה פועל כמצופה? אפשר להסתמך על תגובות של משתמשים ב-Play Console. עם זאת, ייתכן שהוא לא יהיה מדויק מספיק כדי לקבל החלטה ברורה.

אם נתקלתם בבעיות (באגים בקוד, שגיאות דקדוק, ניסוח לא ברור וכו') במהלך העבודה ב-Codelab, אפשר לדווח על הבעיה דרך הקישור דיווח על טעות בפינה הימנית התחתונה של ה-Codelab.

מה תלמדו

  • איך יוצרים משפך ב-Google Analytics for Firebase
  • איך משתמשים בהגדרת התצורה מרחוק ב-Firebase
  • איך מפעילים Firebase A/B Testing

מה צריך להכין

  • Android Studio בגרסה 4.1 ואילך
  • חשבון Google
  • מכשיר בדיקה עם Android מגרסה 5.0 ואילך עם כבל USB לחיבור המכשיר, או אמולטור Android שמריץ AVD(מכשיר וירטואלי של Android) עם תמונת מערכת שתומכת בממשקי API של חנות Play או Google

איזה דירוג מגיע לדעתך לרמת חוויית השימוש שלך ב-AdMob?

מתחילים בינונית בקיאים

איזה דירוג מגיע לדעתך לרמת חוויית השימוש שלך ב-Firebase?

מתחילים בינונית בקיאים

2. הגדרת סביבת פיתוח

להורדת הקוד

כדי להוריד את כל הקוד של Codelab זה, יש ללחוץ על הלחצן הבא:

פורקים את קובץ ה-ZIP שהורדתם. הפעולה הזו תגרום לפתיחת תיקיית בסיס בשם admob-firebase-codelabs-android-master.

...או משכפלים את המאגר של GitHub משורת הפקודה.

$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android

המאגר מכיל ארבע תיקיות כך:

  • android_studio_folder.png101-base — קוד ההתחלה שתפתחו ב-Codelab הזה.
  • android_studio_folder.png101-complete_and_102-base — השלמת הקוד ל-Codelab הזה וגם ל-Codelab 102.
  • android_studio_folder.png102-complete (הקוד הושלם עבור 102 Codelab).

ייבוא של האפליקציה לתחילת הפעולה

מפעילים את Android Studio ובוחרים באפשרות ייבוא פרויקט במסך הפתיחה. לאחר מכן בוחרים את הספרייה 101-complete_and_102-base מהקוד שהורדתם.

עכשיו הפרויקט אמור להיות פתוח ב-Android Studio.

מוסיפים קובץ תצורה של Firebase לפרויקט Android

  1. במסך הסקירה הכללית של הפרויקט Awesome Drawing Quiz, לוחצים על סמל ההגדרות. 9bacb5ada7cbaaf6.png
  2. בכרטיסייה כללי, בוחרים באפליקציה ל-Android כדי להוריד את הקובץ google-service.json.
  3. מעבירים את קובץ התצורה לספריית android_studio_folder.pngapp בפרויקט. 797cde1881a38fdf.png

3. פותחים את פרויקט Firebase מהמסוף.

לפני שממשיכים לשלב הבא, פותחים את הפרויקט ממסוף Firebase שיצרתם בשלב 'הגדרת פרויקט Firebase' ב-AdMob+Firebase 101 Codelab.

e0a028059c9e00cb.png

4. יצירת משפך של אירועי אפליקציה

ייתכן שהוספתם כמה אירועי אפליקציה כדי לעקוב אחר פעילות המשתמש בתוך האפליקציה. בדוח של כל אירוע באפליקציה אפשר לקבל את הפרטים שמשויכים לאירוע, כמו ספירות כוללות, ספירות ממוצעות לכל משתמש, מידע דמוגרפי וכו'.

עם זאת, מה קורה אם רוצים לראות את שיעור ההשלמה של סדרת אירועים, במקום להתמקד באירוע ספציפי? ב-Google Analytics for Firebase, אפשר להשתמש במשפך כדי להמחיש בצורה חזותית ולבצע אופטימיזציה של שיעור ההשלמה של סדרת אירועים באפליקציה.

יצירת משפך

כדי ליצור משפך:

  1. נכנסים למסוף Firebase ובוחרים בפרויקט Awesome Drawing Quiz (בוחן ציור מדהים) שיצרתם.
  2. לוחצים על משפכים.
  3. לוחצים על משפך חדש.
  4. מזינים שם ותיאור בשביל המשפך.
  5. בוחרים את שני האירועים הראשונים שרוצים להגדיר כשלבים במשפך.
  6. לוחצים על הוספת אירוע לכל שלב נוסף ובוחרים אירוע.
  7. לוחצים על יצירה.

על ידי ביצוע השלבים שלמעלה, יוצרים את המשפכים הבאים:

שם המשפך מס' 1: שיעור הצלחה ברמה אירועים: level_start, level_successd3bc78ef61a261d7.png

שם המשפך מס' 2: שיעור השלמת הצפייה במודעות מתגמלות אירועים: ad_reward_prompt, ad_reward_impression, ad_reward45c9542dfa663014.png

מס' 3 שם המשפך: שיעור השלמת המשחק אירועים: game_start, game_completedab25e8501746d5f.png

צפייה בניתוח המשפך

אחרי שיוצרים משפכים, אפשר לגשת אליהם בתפריט משפכים במסוף Firebase. כשלוחצים על שם המשפך ברשימה, אפשר לראות את הניתוח המפורט של כל משפך.

620c0e84587c8ad4.png

לדוגמה, לוחצים על level level rate (שיעור הצלחה של רמה). פרטי המשפך יוצגו באופן הבא:

c889f9b6ece15847.png

בצילום המסך שלמעלה, אפשר לראות את אחוז המשתמשים שנקו רמה (הפעילו את האירוע level_success) אחרי שהתחילו שלב (הפעילו את האירוע level_start). כאן ניתן לראות ש-46.2% מהמשתמשים הסירו את הרמה.

אחרי שלוחצים על ספירת אירועים, המדדים שמבוססים על מספר האירועים יוצגו באופן הבא:

d044fb7b07e6e0d9.png

על סמך המדדים בצילום המסך שלמעלה, היו 116 ניסיונות (הפעלת האירוע level_start) ו-57 פעולות מחיקה (גרמו להפעלה של האירוע level_הצלחה) במהלך התקופה.

מאחר ששיעור ההשלמה שמבוסס על האירועים(49.1%) גבוה מעט מהשיעור שמבוסס על המשתמשים(46.2%), אפשר לומר שיש כמה אנשים שמניבים ביצועים טובים יותר מהאחרים.

5. משלבים את הגדרת התצורה מרחוק באפליקציה

אתם יכולים לקבל תובנות מסוימות על האפליקציה על סמך האירועים באפליקציה והמשפך, ולכן כדאי לבצע אופטימיזציה לאפליקציה. בדרך כלל הוא כולל כוונון עדין של ערך הפרמטר באפליקציה. כדי לשנות את הערך של הפרמטרים האלה, צריך לעדכן את האפליקציה כך שניתן יהיה להחיל את השינויים על המשתמשים.

בעזרת הגדרת התצורה מרחוק ב-Firebase, אתם יכולים לשנות את הערכים האלה ללא עדכון האפליקציה. כלומר, ניתן לשנות את התנהגות האפליקציה מבלי לאלץ את המשתמשים להוריד את העדכון, בלי להפריע להם.

ב-Codelab הזה, נלמד איך להשתמש ב'הגדרת תצורה מרחוק' כדי להתאים את כמות התגמול (מספר האותיות שצריך לחשוף אחרי צפייה במודעת וידאו מתגמלת) בלי לעדכן את האפליקציה.

מוסיפים את הגדרת התצורה מרחוק ליחס התלות של האפליקציה

נתחיל בהוספה של הגדרת תצורה מרחוק ב-Firebase ליחסי התלות של האפליקציה.

app/build.gradle

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...

    // TODO: Add Firebase Remote Config dependency (102)
    implementation 'com.google.firebase:firebase-config-ktx'

    ...
}

...

סנכרון הפרויקט עם קובצי gradle

כדי לוודא שכל יחסי התלות זמינים לאפליקציה שלכם, צריך לסנכרן את הפרויקט עם קובצי GRid. בוחרים באפשרות קובץ > סנכרון הפרויקט עם תפריט Gradle Files כדי לסנכרן את הפרויקט עם קובצי gradle.

מגדירים ערך ברירת מחדל לפרמטר של הגדרת התצורה מרחוק

כדי לאחזר את הערכים מהגדרת התצורה מרחוק, צריך חיבור לרשת. אם הרשת לא זמינה, יש להגדיר ערך ברירת מחדל לכל פרמטר של הגדרת תצורה מרחוק.

יוצרים את הקובץ remote_config_defaults.xml בתיקייה res/xml. לאחר מכן מגדירים ערך ברירת מחדל לסכום התגמול (reward_amount)כפי שמפורט בהמשך:

res/xml/remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
    <entry>
        <key>reward_amount</key>
        <value>1</value>
    </entry>
</defaultsMap>

שימו לב: reward_amount הוא שם הפרמטר בהגדרת התצורה מרחוק.

מאחזרים את סכום התגמול מהגדרת התצורה מרחוק

משנים את AwesomeDrawingQuiz.kt כדי ליצור את המחלקה GameSettings כך שתכלול הפניה למכונה RemoteConfig.

חשוב לשים לב שהמכונה RemoteConfig מוגדרת לאחזר את הערכים האחרונים מהשרת במצב ניפוי באגים כדי לעזור בתהליך הפיתוח. (הגדרת מרווח זמן מינימלי לאחזור כאפס שניות על ידי קריאה ל-fetch(0L))

AwesomeDrawingQuiz.kt

class AwesomeDrawingQuiz : Application() {

    ...

    // COMPLETE: Provide FirebaseRemoteConfig instance (102)
    private fun provideGameSettings() = GameSettings(provideRemoteConfig())

    // COMPLETE: Add a function that provides a FirebaseRemoteConfig instance (102)
    private fun provideRemoteConfig(): FirebaseRemoteConfig {
        val rc = Firebase.remoteConfig.apply {
            setDefaultsAsync(R.xml.remote_config_defaults)
        }
        val fetchTask = if (BuildConfig.DEBUG) rc.fetch(0L) else rc.fetch()
        fetchTask.addOnCompleteListener {
            if (it.isSuccessful) {
                Log.d("AwesomeDrawingQuiz", "Remote config value fetched")
                rc.activate()
            }
        }
        return rc
    }
}

לאחר מכן, משנים את המחלקה GameSettings כדי לאחזר את סכום התגמול מהגדרת התצורה מרחוק.

GameSettings.kt

// TODO: Add FirebaseRemoteConfig as a class member
class GameSettings(private val rc: FirebaseRemoteConfig) {

  ...

  // TODO: Apply reward amount from the Remote Config (102)
  val rewardAmount: Int
    get() = rc.getLong(KEY_REWARD_AMOUNT).toInt()

  companion object {
    ...

    // TODO: Add a key for 'reward_amount' Remote Config parameter (102)
    private const val KEY_REWARD_AMOUNT = "reward_amount"
  }
}

יוצרים פרמטר של הגדרת תצורה מרחוק מהמסוף

בשלב הבא, יוצרים פרמטר חדש של הגדרת תצורה מרחוק עבור סכום התגמול, כדי שתוכלו לשנות את הערך שלו בזמן אמת.

כדי ליצור פרמטר חדש, נכנסים למסוף Firebase ובוחרים את הפרויקט Awesome Drawing Quiz שיצרתם קודם. לוחצים על הגדרת תצורה מרחוק -> מוסיפים את לחצן הפרמטר הראשון.

7f52617141c53726.png

נותנים לפרמטר את השם reward_amount ומגדירים את ערך ברירת המחדל ל-1. לאחר מכן, לוחצים על הלחצן הוספת פרמטר.

cbc771fd1685b29c.png

לוחצים על הלחצן פרסום השינויים כדי שהשינויים ייכנסו לתוקף אצל המשתמשים.

d6a6aa4a60e06ee9.png

6. שינוי ההתנהגות של האפליקציה עם הגדרת התצורה מרחוק

עכשיו אפשר להגדיר את סכום התגמול בבוחן הציור Awesome Drawing במסוף Firebase בלי לעדכן את קוד האפליקציה.

בקטע הזה, יש לשנות את סכום התגמול מ-1 ל-2 כדי לגרום לאפליקציה לחשוף שתי דמויות נוספות לרמז אחרי צפייה במודעה מתגמלת.

לעדכן את ערך ברירת המחדל של הפרמטר reward_amount

נכנסים למסוף Firebase ובוחרים את הפרויקט Awesome Drawing Quiz (בוחן ציור מדהים) שיצרתם. לוחצים על הגדרת תצורה מרחוק, ואז לוחצים על reward_amount מתוך הרשימה. לאחר מכן, משנים את ערך ברירת המחדל ל-2, ולאחר מכן לוחצים על הלחצן עדכון.

9a9bd8a26a39bfe3.png

לוחצים על הלחצן פרסום השינויים כדי שהשינויים ייכנסו לתוקף אצל המשתמשים.

d6a6aa4a60e06ee9.png

אימות השינוי בהתנהגות האפליקציה

כדי לאשר את השינוי בהתנהגות של האפליקציה, צריך להריץ שוב את הפרויקט. בסיום הצפייה במודעה מתגמלת, תראו שהאפליקציה חושפת שתי אותיות כפרס, כפי שהגדרנו במסוף הגדרת התצורה מרחוק.

לפני שצופים במודעה מתגמלת

נחשפו שתי אותיות נוספות כפרס

7. יוצרים ניסוי כדי לבצע אופטימיזציה של סכום התגמול

עכשיו אפשר לשנות את סכום התגמול בלי לפרסם עדכון לאפליקציה. עם זאת, איך אפשר לבדוק מהו המספר ששיניתם כדי להתאים לאפליקציה?

בעזרת Firebase A/B Testing, אפשר להריץ ניסויים לשיפור חוויית המשתמש הכוללת באפליקציה בלי לעדכן את האפליקציה או ליצור כלי נפרד כדי להריץ כל ניסוי ולעקוב אחרי הביצועים שלו.

תכנון הניסוי

לפני שיוצרים ניסוי חדש, צריך להגדיר לו יעד או יעד ברורים. חשוב לעיין ברשימת המשימות הבאה לפני שיוצרים ניסוי חדש.

  • מה ברצונך לבצע אופטימיזציה? (למשל, רמת הקושי של המשחק, תזמון הצגת המודעות או הרשאות הגישה אליו וכו')
  • הסיבה: מהו היעד העסקי להפעלת הניסוי? (למשל, כדי למקסם את ההכנסות מפרסום, להגדיל את שימור הקהל וכו').
  • מי: מי נכלל בניסוי? (למשל: כל המשתמשים, קהל משתמשים ספציפי וכו')

ב-Codelab הזה, אתם עומדים ליצור ניסוי כדי לבצע אופטימיזציה של ערך סכום התגמול כדי למקסם את מעורבות המשתמשים היומית בבוחן הציור Awesome.

יוצרים את הניסוי.

פותחים את הפרויקט Awesome Drawing Quiz ממסוף Firebase. בוחרים בתפריט A/B Testing ואז לוחצים על הלחצן יצירת ניסוי.

בוחרים את הגדרת התצורה מרחוק כדי ליצור ניסוי של הגדרת תצורה מרחוק.

f38a85328ab54e7e.png

נותנים לניסוי שם 'סכום התגמול' כמו שמוצג בצילום המסך הבא.

15d552adb61c0b08.png

מגדירים את אפשרויות הטירגוט. ב-Codelab הזה, אפשר לטרגט 100% מהמשתמשים בAwesome Drawing Quiz.

61b316741a63050f.png

מאחר שהמטרה העיקרית של הניסוי היא למצוא ערך אופטימלי שממקסם את התעניינות המשתמשים היומית, בוחרים באפשרות התעניינות המשתמשים היומית בתור מדד ראשי למעקב.

694641b57d90ff65.png

לבסוף, מגדירים את אמצעי הבקרה ואת קבוצת הווריאנטים כדי להבין איזו קבוצה מניבה ביצועים טובים יותר. בוחרים את reward_amount מקבוצת הבקרה ומשאירים את הערך שלו ללא שינוי. בקבוצת הווריאנטים, נותנים לה את השם 'פחות פרס', ואז משנים את הערך של reward_amount ל-1.

10ed7f5b06858519.png

בהגדרות האלה, אנשים בקבוצה 'פחות פרסים' יקבלו אות אחת כפרס, והאנשים בקבוצת הבקרה יקבלו שתי אותיות כפרס. כתוצאה מכך, תוכלו לראות איך כמות התגמול משפיעה על המשתמשים.

אחרי שלוחצים על הלחצן בדיקה, תוצג סקירה כללית של הניסוי.

ae6477ce79f6265d.png

הפעלת הניסוי

לוחצים על הלחצן התחלת הניסוי כדי להפעיל את הניסוי. לתשומת ליבכם: לא ניתן לשנות את הגדרת הניסוי לאחר שהוא מתחיל.

7131bf9b4fa74fa5.png

8. ניהול הניסוי

איך בודקים את התקדמות הניסוי

אפשר לבדוק את התקדמות הניסוי בתפריט A/B Testing במסוף Firebase, שייראה כמו צילום המסך הבא. שימו לב שאפשר גם לראות בכרטיס את מספר המשתמשים שהשתתפו בניסוי ב-30 הדקות האחרונות.

8a7009bdd8871d95.png

לאחר שלוחצים על ניסוי מתוך הרשימה, ניתן לראות את פרטי הניסוי. עד שהניסוי יוכל להכריז על מנהיג (כלומר, הווריאנט בעל הביצועים הטובים ביותר), תוצג ההודעה It's have too long to, a שאר.

a4e7ca3e3f4711cd.png

אחרי שהניסוי יפעל למשך זמן מה, הנתונים שנאספו במהלך הניסוי עד עכשיו יוצגו בקטע סקירה כללית של השיפורים. ניתן להשוות את הביצועים של כל וריאציה כדי לבדוק מי מהם מניב ביצועים טובים יותר. בצילום המסך הבא מוצגת דוגמה לקטע 'סקירה כללית של השיפורים'.

e2d00fc27c053fd3.png

בטבלה שמתחת לקטע סקירה כללית על השיפורים, אפשר לבדוק את הפרטים של מדדי היעדים של הניסוי, וגם מדדים נוספים שעוקבים אחריהם בניסוי. בצילום המסך הבא מוצגת דוגמה לקטע של פרטי המדדים.

c3859d642f85cc52.png

השקת המנהיג לכל המשתמשים

אחרי שהניסוי יפעל למשך זמן רב שבו הווריאנט המוביל, או הווריאנט המנצח, אפשר להשיק את הניסוי ל-100% מהמשתמשים. אחרי שבדיקת ה-A/B תימצא מובילה ברורה, תוכלו לעודד אתכם להשיק את הווריאנט המוביל לכל המשתמשים.

86cb6a6c07516634.png

עם זאת, גם אם הניסוי לא מוכר כמובילים ברורים, עדיין אפשר לבחור להשיק וריאנט לכל המשתמשים.

במסך פרטי הניסוי, לוחצים על תפריט ההקשר ( 73afe611adf58774.png) ואז לוחצים על השקת וריאנט.

374e1c72be1d0656.png

בוחרים וריאציה שתושק לכל המשתמשים, ולאחר מכן לוחצים על הלחצן בדיקה בהגדרת תצורה מרחוק כדי לבדוק את השינויים לפני שמבצעים שינוי בהגדרת התצורה מרחוק.

e176f6e6a72c754.png

אחרי שמוודאים שאין בעיה בטיוטה, לוחצים על הלחצן פרסום השינויים כדי שהשינויים ייכנסו לתוקף אצל כל המשתמשים.

d65d545620ce93f6.png

9. הכול מוכן!

סיימת את AdMob+Firebase 102 Codelab של Android. הקוד המלא של Codelab הזה מופיע בתיקייה android_studio_folder.png102-complete.