בדף הזה מוסבר איך להפעיל את App Check באפליקציה ל-Android באמצעות ספק App Check בהתאמה אישית. כשמפעילים את App Check, אפשר לוודא שרק לאפליקציה תהיה גישה למשאבי Firebase של הפרויקט.
אם רוצים להשתמש ב-App Check עם ספק ברירת המחדל של Play Integrity, אפשר לעיין במאמר הפעלת App Check עם Play Integrity ב-Android.
לפני שמתחילים
מוסיפים את Firebase לפרויקט Android, אם עדיין לא עשיתם זאת.
1. הוספת הספרייה App Check לאפליקציה
בקובץ 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:33.6.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") }
כשמשתמשים ב-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:18.0.0") }
2. הטמעת הממשקים App Check
קודם כול צריך ליצור כיתות שמטמיעות את הממשקים AppCheckProvider
ו-AppCheckProviderFactory
.
לכיתה AppCheckProvider
צריכה להיות שיטה getToken()
, שמאגרת את כל המידע שנחוץ לספק App Check המותאם אישית כהוכחת אותנטיות, ושולחת אותו לשירות קבלת האסימון בתמורה לאסימון App Check. ה-SDK של App Check מטפל בשמירת אסימונים במטמון, לכן תמיד צריך לקבל אסימון חדש בהטמעה של getToken()
.
Kotlin+KTX
class YourCustomAppCheckToken( private val token: String, private val expiration: Long, ) : AppCheckToken() { override fun getToken(): String = token override fun getExpireTimeMillis(): Long = expiration } class YourCustomAppCheckProvider(firebaseApp: FirebaseApp) : AppCheckProvider { override fun getToken(): Task<AppCheckToken> { // Logic to exchange proof of authenticity for an App Check token and // expiration time. // ... // Refresh the token early to handle clock skew. val expMillis = expirationFromServer * 1000L - 60000L // Create AppCheckToken object. val appCheckToken: AppCheckToken = YourCustomAppCheckToken(tokenFromServer, expMillis) return Tasks.forResult(appCheckToken) } }
Java
public class YourCustomAppCheckToken extends AppCheckToken { private String token; private long expiration; YourCustomAppCheckToken(String token, long expiration) { this.token = token; this.expiration = expiration; } @NonNull @Override public String getToken() { return token; } @Override public long getExpireTimeMillis() { return expiration; } } public class YourCustomAppCheckProvider implements AppCheckProvider { public YourCustomAppCheckProvider(FirebaseApp firebaseApp) { // ... } @NonNull @Override public Task<AppCheckToken> getToken() { // Logic to exchange proof of authenticity for an App Check token and // expiration time. // ... // Refresh the token early to handle clock skew. long expMillis = expirationFromServer * 1000L - 60000L; // Create AppCheckToken object. AppCheckToken appCheckToken = new YourCustomAppCheckToken(tokenFromServer, expMillis); return Tasks.forResult(appCheckToken); } }
בנוסף, מטמיעים מחלקה AppCheckProviderFactory
שיוצרת מופעים של ההטמעה של AppCheckProvider
:
Kotlin+KTX
class YourCustomAppCheckProviderFactory : AppCheckProviderFactory { override fun create(firebaseApp: FirebaseApp): AppCheckProvider { // Create and return an AppCheckProvider object. return YourCustomAppCheckProvider(firebaseApp) } }
Java
public class YourCustomAppCheckProviderFactory implements AppCheckProviderFactory { @NonNull @Override public AppCheckProvider create(@NonNull FirebaseApp firebaseApp) { // Create and return an AppCheckProvider object. return new YourCustomAppCheckProvider(firebaseApp); } }
3. אתחול של App Check
מוסיפים לאפליקציה את קוד האתחול הבא כדי שהוא ירוץ לפני שמשתמשים ב-SDK אחר של Firebase:
Kotlin+KTX
Firebase.initialize(context) Firebase.appCheck.installAppCheckProviderFactory( YourCustomAppCheckProviderFactory(), )
Java
FirebaseApp.initializeApp(/*context=*/ context); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( new YourCustomAppCheckProviderFactory());
השלבים הבאים
אחרי שספריית App Check מותקנת באפליקציה, אפשר להתחיל להפיץ את האפליקציה המעודכנת למשתמשים.
אפליקציית הלקוח המעודכנת תתחיל לשלוח אסימוני App Check יחד עם כל בקשה שהיא שולחת ל-Firebase, אבל מוצרי Firebase לא ידרשו שהאסימונים יהיו תקפים עד שתפעילו את האכיפה בקטע App Check במסוף Firebase.
מעקב אחרי המדדים והפעלת האכיפה
עם זאת, לפני שמפעילים את האכיפה, חשוב לוודא שהפעולה הזו לא תפריע למשתמשים החוקיים הקיימים. לעומת זאת, אם אתם רואים שימוש חשוד במשאבי האפליקציה, מומלץ להפעיל את האכיפה מוקדם יותר.
כדי לעזור לכם לקבל את ההחלטה הזו, תוכלו לעיין במדדים של App Check בשירותים שבהם אתם משתמשים:
- מעקב אחרי מדדי הבקשות של App Check עבור Realtime Database, Cloud Firestore, Cloud Storage, Authentication (בטא) ו-Vertex AI in Firebase.
- מעקב אחר מדדי הבקשות של App Check עבור Cloud Functions.
הפעלת אכיפה של App Check
אחרי שתבחנו את ההשפעה של App Check על המשתמשים ותרגישו מוכנים להמשיך, תוכלו להפעיל את האכיפה של App Check:
- מפעילים את האכיפה של App Check עבור Realtime Database, Cloud Firestore, Cloud Storage, Authentication (בטא) ו-Vertex AI in Firebase.
- מפעילים את אכיפת App Check עבור Cloud Functions.
שימוש ב-App Check בסביבות ניפוי באגים
אם אחרי שרושמים את האפליקציה ל-App Check רוצים להריץ אותה בסביבה שבדרך כלל App Check לא מסווגת כתקינה, כמו אמולטור במהלך הפיתוח או מסביבת שילוב רצוף (CI), אפשר ליצור גרסה לניפוי באגים של האפליקציה שמשתמשת בספק ניפוי הבאגים של App Check במקום בספק אימות אמיתי.
שימוש ב-App Check עם ספק ניפוי הבאגים ב-Android