שימוש ב-App Check עם ספק ניפוי הבאגים ב-Android

אחרי שמפעילים את App Check בשירות לקצה העורפי, התכונות של האפליקציה שתלויות בשירות לקצה העורפי הזה לא יפעלו באמולטור או בסביבת אינטגרציה רציפה (CI), כי הסביבות האלה לא עומדות בדרישות של מכשירים תקינים. כדי להריץ את האפליקציה בסביבות האלה במהלך הפיתוח והבדיקות, צריך ליצור גרסת ניפוי באגים של האפליקציה שמשתמשת בApp Check ספק ניפוי באגים במקום בספק אימות בסביבת ייצור.

שימוש בספק אימות לצורכי ניפוי באגים באמולטור

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

  1. בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts או <project>/<app-module>/build.gradle), מוסיפים את התלות בספרייה App Check ל-Android. מומלץ להשתמש ב-Firebase Android BoM כדי לשלוט בניהול הגרסאות של הספריות.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.16.0"))
    
        // Add the dependencies for the App Check libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug")
    }

    באמצעות Firebase Android BoM, האפליקציה שלכם תמיד תשתמש בגרסאות תואמות של ספריות Firebase ל-Android.

    (חלופה)  מוסיפים תלות של הפרויקט בספריות Firebase בלי להשתמש ב-BoM

    אם בוחרים לא להשתמש ב-Firebase BoM, צריך לציין כל גרסה של ספריית Firebase בשורת התלות שלה.

    הערה: אם אתם משתמשים בכמה ספריות Firebase באפליקציה, מומלץ מאוד להשתמש ב-BoM כדי לנהל את גרסאות הספריות, וכך לוודא שכל הגרסאות תואמות.

    dependencies {
        // Add the dependencies for the App Check libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug:19.3.0")
    }

  2. בגרסת build לניפוי באגים, מגדירים את App Check כך שישתמש ב-factory של ספק אימות לצורכי ניפוי באגים:

    Kotlin

    Firebase.initialize(context = this)
    Firebase.appCheck.installAppCheckProviderFactory(
        DebugAppCheckProviderFactory.getInstance(),
    )

    Java

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());
  3. קבלת טוקן לניפוי באגים:

    1. מריצים את האפליקציה באמולטור או במכשיר הבדיקה.

    2. מחפשים את אסימון הניפוי באגים App Check ביומנים. לדוגמה:

      D DebugAppCheckProvider: Enter this debug secret into the allow list
      in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
      
    3. מעתיקים את הטוקן (לדוגמה, 123a4567-b89c-12d3-e456-789012345678).

  4. רושמים את אסימון ניפוי הבאגים ב-App Check:

    1. במסוף Firebase, עוברים אל Security > App Check > הכרטיסייה Apps.

    2. מוצאים את האפליקציה, לוחצים על סמל האפשרויות הנוספות (3 נקודות) ובוחרים באפשרות ניהול של טוקנים לניפוי באגים.

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

    צילום מסך של פריט התפריט 'ניהול אסימוני ניפוי באגים' במסוף Firebase

אחרי שרושמים את הטוקן ב-App Check, שירותי ה-Backend יקבלו אותו כטוקן תקין.

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

שימוש בספק ניפוי הבאגים לבדיקות יחידה בסביבת CI

כך משתמשים בספק אימות לצורכי ניפוי באגים לבדיקות יחידה בסביבת אינטגרציה רציפה (CI):

  1. במסוף Firebase, יוצרים אסימון לניפוי באגים:

    1. במסוף Firebase, עוברים אל Security > App Check > הכרטיסייה Apps.

    2. מוצאים את האפליקציה, לוחצים על סמל האפשרויות הנוספות (3 נקודות) ובוחרים באפשרות ניהול של טוקנים לניפוי באגים.

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

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

    צילום מסך של הפריט Manage Debug Tokens (ניהול טוקנים לניפוי באגים) בתפריט

  2. מוסיפים את אסימון הניפוי באגים שיצרתם למאגר המפתחות המאובטח של מערכת ה-CI (לדוגמה, encrypted secrets ב-GitHub Actions או encrypted variables ב-Travis CI).

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

  4. בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts או <project>/<app-module>/build.gradle), מוסיפים את התלות בספרייה App Check ל-Android. מומלץ להשתמש ב-Firebase Android BoM כדי לשלוט בניהול הגרסאות של הספריות.

    Kotlin

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.16.0"))
    
        // Add the dependency for the App Check library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug")
    }

    באמצעות Firebase Android BoM, האפליקציה שלכם תמיד תשתמש בגרסאות תואמות של ספריות Firebase ל-Android.

    (חלופה)  מוסיפים תלות של הפרויקט בספריות Firebase בלי להשתמש ב-BoM

    אם בוחרים לא להשתמש ב-Firebase BoM, צריך לציין כל גרסה של ספריית Firebase בשורת התלות שלה.

    הערה: אם אתם משתמשים בכמה ספריות Firebase באפליקציה, מומלץ מאוד להשתמש ב-BoM כדי לנהל את גרסאות הספריות, וכך לוודא שכל הגרסאות תואמות.

    dependencies {
        // Add the dependency for the App Check library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug:19.3.0")
    }

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.16.0"))
    
        // Add the dependency for the App Check library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug")
    }

    באמצעות Firebase Android BoM, האפליקציה שלכם תמיד תשתמש בגרסאות תואמות של ספריות Firebase ל-Android.

    (חלופה)  מוסיפים תלות של הפרויקט בספריות Firebase בלי להשתמש ב-BoM

    אם בוחרים לא להשתמש ב-Firebase BoM, צריך לציין כל גרסה של ספריית Firebase בשורת התלות שלה.

    הערה: אם אתם משתמשים בכמה ספריות Firebase באפליקציה, מומלץ מאוד להשתמש ב-BoM כדי לנהל את גרסאות הספריות, וכך לוודא שכל הגרסאות תואמות.

    dependencies {
        // Add the dependency for the App Check library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug:19.3.0")
    }

  5. מוסיפים את השורות הבאות להגדרות של וריאנט ה-build של ה-CI:

    testInstrumentationRunnerArguments["firebaseAppCheckDebugSecret"] =
        System.getenv("APP_CHECK_DEBUG_TOKEN_FROM_CI") ?: ""
    
  6. בכיתות הבדיקה, משתמשים ב-DebugAppCheckTestHelper כדי לתחום כל קוד שזקוק לטוקן App Check:

    Kotlin

    @RunWith(AndroidJunit4::class)
    class MyTests {
        private val debugAppCheckTestHelper =
            DebugAppCheckTestHelper.fromInstrumentationArgs()
    
        @Test
        fun testWithDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider {
                // Test code that requires a debug AppCheckToken.
            }
        }
    
        @Test
        fun testWithNonDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(
                FirebaseApp.getInstance("nonDefaultApp")
            ) {
                // Test code that requires a debug AppCheckToken.
            }
        }
    }
    

    Java

    @RunWith(AndroidJunit4.class)
    public class YourTests {
        private final DebugAppCheckTestHelper debugAppCheckTestHelper =
                DebugAppCheckTestHelper.fromInstrumentationArgs();
    
        @Test
        public void testWithDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(() -> {
                // Test code that requires a debug AppCheckToken.
            });
        }
    
        @Test
        public void testWithNonDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(
                    FirebaseApp.getInstance("nonDefaultApp"),
                    () -> {
                        // Test code that requires a debug AppCheckToken.
                    });
        }
    }
    

כשהאפליקציה פועלת בסביבת CI, שירותי ה-Backend יקבלו את האסימון שהיא שולחת כחוקי.