שימוש ב-App Check כדי לאבטח את Navigation SDK ל-Android

‫Firebase App Check מספק הגנה לשיחות מהאפליקציה שלכם אל Google Maps Platform על ידי חסימת תנועה שמגיעה ממקורות אחרים מלבד האפליקציות הלגיטימיות שלכם. היא עושה זאת על ידי בקשת הערכה של האותנטיות של האפליקציה או המכשיר מספק אישורים כמו Play Integrity. כשמשלבים את האפליקציה עם App Check, מוסיפים הגנה מפני בקשות זדוניות ולא מורשות, וכך מונעים חיובים לא מורשים. בנוסף, App Check משפר באופן משמעותי את הדיווח על שיבושים בזמן אמת במערכת האפליקציות של צי הרכב, וכך מועיל לכל הנהגים שמשתמשים באפליקציה. מידע נוסף זמין במאמר בנושא דיווח על שיבושים.

למה כדאי להשתמש ב-App Check?

התכונה App Check מגנה על שני תחומים נפרדים ב-Navigation SDK ל-Android: פונקציונליות הניווט הראשית ודיווח על שיבושים.

התכונה App Check עוזרת לחסום בקשות של Navigation SDK ל-Android ממקורות זדוניים או לא מורשים. היתרון העיקרי הוא הגנה על הפרויקט מפני הונאות שקשורות לחיוב וניצול מלא של המכסה.

דיווח על שיבושים

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

למה חשוב להשתמש ב-App Check לצורך דיווח:

  • רמת האמינות הגבוהה של חסימות: אירועים שמשפיעים על המסלול, כמו חסימות כבישים, יכולים לשנות באופן משמעותי את התנהגות הניתוב של כל הנהגים. כדי להגן על המפה מפני ונדליזם, ספאם או דיווחים לא מדויקים, תשתית הפיקוח של Google על שיבושים שקשורים לחסימות כבישים מסתמכת על אותות חזקים של תקינות המכשיר ותקינות האפליקציה.
  • איך App Check מאמת דוחות: דוחות ודירוגים של משתמשים שנשלחים מ-Navigation SDK for Android כוללים את טוקן App Check. ה-Backend של Google משתמש בטוקן כדי לאמת את הלגיטימיות של המשוב, וכך מעלה את רמת האמינות שלו ומאפשר להעריך את ההשפעה שלו על המפה הפעילה.
  • ההשפעה של השמטת App Check: דוחות שנשלחים בלי טוקן App Check תקין מוערכים במסגרת מודל עם רמת מהימנות נמוכה יותר, ויכול להיות שהם יעובדו רק כאותות שקטים. המשמעות היא שגם אם המשתמשים שלכם ידווחו על משהו או יצביעו, יש פחות סיכוי שהדיווחים שלהם יופיעו במפה או ישפיעו על המסלולים של נהגים אחרים, ויידרש אימות נוסף.

האם App Check מתאים לי?

ברוב המקרים מומלץ להשתמש ב-App Check, אבל אין צורך להשתמש בו או שהוא לא נתמך בתרחישים הבאים:

  • אפליקציות פרטיות או ניסיוניות: אם האפליקציה לא נגישה לציבור, לא צריך להשתמש ב-App Check.
  • מכשירים שנפרצו: ספקי האימות המומלצים מונעים את ההפעלה של Navigation SDK for Android במכשירים לא מהימנים, כמו טלפונים עם הרשאות Root או טלפונים שעברו פריצה (Jailbreak). כדי לתמוך במכשירים האלה, צריך לפרוס ספק אימות בהתאמה אישית.
  • מכשירי Android ללא GMS: במכשירי Android צריך להפעיל את שירותי Google לנייד ‏ (GMS) כדי להשתמש ב-Play Integrity. אם אתם מתכננים לתמוך במכשירי Android שאינם GMS, אתם צריכים לפרוס ספק אימות מותאם אישית.

סקירה כללית של שלבי ההטמעה

כדי לשלב את האפליקציה עם App Check, פועלים לפי השלבים הבאים:

  1. מוסיפים את Firebase לאפליקציה.
  2. מוסיפים את ספריית App Check ומפעילים את App Check.
  3. מוסיפים ספק טוקנים. בשלב הזה מופעל ספק האימות שבחרתם כדי לאמת את תקינות המכשיר או האפליקציה.
  4. מאתחלים את ממשקי ה-API של הניווט ושל App Check.
  5. מפעילים את ניפוי הבאגים. האפשרות הזו שימושית במהלך הפיתוח או בסביבות של אינטגרציה רציפה (CI).
  6. מומלץ לעקוב אחרי הבקשות של האפליקציה לפני שמפעילים את האכיפה. כך תוכלו לאכוף את השימוש ב-App Check בצורה חלקה בלי לשבש את חוויית המשתמש.

שיקולים בתכנון שילוב של App Check

  • מכסות של ספק אישורים: לספק האישורים המומלץ שלנו, Play Integrity, יש מגבלה יומית על מספר הקריאות לרמת השימוש הרגילה ב-API שלו. מידע נוסף על מגבלות על קריאות זמין בדף הגדרה במסמכי התיעוד למפתחים של Google Play Integrity.
  • זמן האחזור בהפעלה: ברוב המקרים, המשתמשים לא יחוו זמן אחזור במהלך שימוש רגיל, כי האסימונים של App Check נשמרים במטמון במכשיר. המערכת מרעננת אוטומטית את האסימונים של App Check ברקע לפני שהתוקף שלהם פג, כדי לשמור על ביצועים חלקים. עם זאת, אם לא קיים טוקן תקף של App Check, משתמשי האפליקציה יחוו השהיה מסוימת בהפעלה. לדוגמה, השהיה כזו מתרחשת במהלך הפעלות קרות, כשפג התוקף של טוקן שנשמר במטמון או כשהוא חסר.
  • אורך החיים של הטוקן: אורך החיים (TTL) קובע את משך הזמן שבו הטוקן של App Check תקף לפני שצריך לרענן אותו. אפשר להגדיר את משך הזמן הזה מ-30 דקות עד 7 ימים במסוף Firebase. מומלץ להגדיר משך של שעה כערך בסיסי מאובטח, אבל ה-SDK מנסה לרענן את האסימונים ברקע באופן אוטומטי בערך במחצית משך ה-TTL. הוראות מפורטות לשימוש במסוף זמינות במסמכי התיעוד של Firebase App Check.

שילוב האפליקציה עם App Check

דרישות מוקדמות

  • אפליקציה עם Navigation SDK ל-Android בגרסה 7.9 ואילך.
  • טביעת האצבע לאישור SHA-256 של האפליקציה.
  • שם החבילה של האפליקציה.
  • אתם צריכים להיות הבעלים של האפליקציה במסוף Google Cloud.
  • מזהה הפרויקט של האפליקציה במסוף Google Cloud.

שלב 1: מוסיפים את Firebase לאפליקציה

פועלים לפי ההוראות במסמכי התיעוד למפתחים של Firebase כדי להוסיף את Firebase לאפליקציה. מוסיפים את הקובץ google-services.json לספרייה ברמת האפליקציה של הפרויקט.

שלב 2: מוסיפים את ספריית App Check ומפעילים את App Check

מוסיפים את התלות App Check לקובץ build.gradle של האפליקציה:

‫Groovy (build.gradle)

dependencies {
    // Import the Firebase BoM
    implementation platform('com.google.firebase:firebase-bom:34.17.0')
    // Add the dependency for the App Check library with Play Integrity
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
}

מאתחלים את App Check במחלקה Application או בפעילות הראשית:

Java

import com.google.firebase.FirebaseApp;
import com.google.firebase.appcheck.FirebaseAppCheck;
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;

// Initialize Firebase App
FirebaseApp.initializeApp(/* context= */ this);

// Initialize App Check
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance());

Kotlin

import com.google.firebase.Firebase
import com.google.firebase.appcheck.appCheck
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
import com.google.firebase.initialize

// Initialize Firebase App
Firebase.initialize(context = this)

// Initialize App Check
Firebase.appCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance(),
)

שלב 3: מוסיפים את ספק הטוקנים

יוצרים הטמעה של הממשק MapsAppCheckTokenProvider. הספק הזה מאחזר באופן אסינכרוני טוקנים של App Check מ-Firebase App Check ומעביר אותם ל-Navigation SDK למערך הרשת של Android באמצעות MapsAppCheckTokenCallback:

Java

import com.google.android.gms.maps.MapsAppCheckTokenCallback;
import com.google.android.gms.maps.MapsAppCheckTokenProvider;
import com.google.firebase.appcheck.FirebaseAppCheck;

public class NavigationTokenProvider implements MapsAppCheckTokenProvider {
  @Override
  public void fetchToken(MapsAppCheckTokenCallback callback) {
    FirebaseAppCheck.getInstance()
        .getAppCheckToken(false) // forcingRefresh = false
        .addOnSuccessListener(
            tokenResult -> {
              String token = tokenResult.getToken();
              callback.onSuccess(token);
            })
        .addOnFailureListener(
            e -> {
              callback.onFailure();
            });
  }
}

Kotlin

import com.google.android.gms.maps.MapsAppCheckTokenCallback
import com.google.android.gms.maps.MapsAppCheckTokenProvider
import com.google.firebase.appcheck.FirebaseAppCheck

class NavigationTokenProvider : MapsAppCheckTokenProvider {
    override fun fetchToken(callback: MapsAppCheckTokenCallback) {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResult ->
                callback.onSuccess(tokenResult.token)
            }
            .addOnFailureListener {
                callback.onFailure()
            }
    }
}

שלב 4: מאתחלים את ממשקי ה-API של Navigation ו-App Check

מפעילים את Navigation SDK ל-Android ורושמים את מופע ספק האסימונים המאוחד באמצעות MapsApiSettings.setAppCheckTokenProvider():

Java

import com.google.android.gms.maps.MapsApiSettings;

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, new NavigationTokenProvider());

Kotlin

import com.google.android.gms.maps.MapsApiSettings

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, NavigationTokenProvider())

שלב 5: הפעלת ניפוי באגים (אופציונלי)

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

  1. מוסיפים את התלות של ספק אימות לצורכי ניפוי באגים לקובץ build.gradle של האפליקציה:

    ‫Groovy (build.gradle)

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug'
    }
  2. מגדירים את App Check כך שישתמש במפעל של ספק אימות לצורכי ניפוי באגים בגרסאות build לניפוי באגים שלכם:

    Java

    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory;
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;
    
    if (BuildConfig.DEBUG) {
        firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance()
        );
    } else {
        firebaseAppCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance()
        );
    }

    Kotlin

    import com.google.firebase.Firebase
    import com.google.firebase.appcheck.appCheck
    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
    
    if (BuildConfig.DEBUG) {
        Firebase.appCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance(),
        )
    } else {
        Firebase.appCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance(),
        )
    }
  3. מפעילים את האפליקציה באמולטור או במכשיר לניפוי באגים. ‫App Check ידפיס אסימון מקומי לניפוי באגים בפלט של logcat.
  4. מעתיקים את אסימון ניפוי הבאגים הזה ורושמים אותו במסוף Firebase. פרטים נוספים זמינים במסמכי התיעוד בנושא ספק אימות לצורכי ניפוי באגים של Firebase App Check.

שלב 6: מעקב אחרי בקשות האפליקציה והחלטה לגבי אכיפה

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

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