1. הקדמה
אתה יכול להשתמש ב-Firebase App Check עם App Attest כדי להגן על שירותי הקצה האחוריים שלך ולוודא שבקשות לשירותי Firebase מגיעות מהאפליקציה האותנטית שלך.
בדרך כלל מומלץ להכניס משתמשים בהדרגה לשירות App Attest כדי להימנע מפגיעה במגבלות המכסה. למידע נוסף, עיין בתיעוד " הכנה לשימוש בשירות אישור האפליקציה " של אפל.
היכולת לשחרר עדכוני אפליקציה בהדרגה באמצעות תכונת ה-App Store Connect של Apple, כמתואר ב"שחרור עדכון גרסה בשלבים ", יכולה להפוך את השקת App Check לחלקה יותר. זהו פתרון פשוט ופשוט. עם זאת, שחרור עדכון גרסת אפליקציה בשלבים אינו מאפשר לך לשלוט בהשקה או לשנות התנהגות של אפליקציות קיימות ומעודכנות מבלי לפרסם גרסת אפליקציה חדשה.
אחת הדרכים לקבל שליטה רבה יותר על השקת App Check with App Attest היא להשתמש ב-Firebase Remote Config כדי להפעיל App Check עם App Attest עבור אחוז ממשתמשי האפליקציה שלך בכל פעם. זה עשוי לסייע בהימנעות מצריבה משרתי האישורים. ניתן להשתמש ב-Google Analytics כדי לראות את ההשפעה של ההשקה על המשתמשים.
מה תלמד
במעבדת קוד מרובה שלבים זו, תלמד כיצד להשתמש בתצורה מרחוק של Firebase כדי להפעיל את App Check עבור האפליקציה שלך.
מעבד קוד זה משתמש בפרויקט Firebase המבוסס על אפליקציית ההתחלה המהירה DatabaseExample ומשולב עם Firebase App Check, כמתואר ב- Firebase App Check for Apple Platforms . אפליקציית ההתחלה המהירה של DatabaseExample מאפשרת למשתמשים להיכנס ולהוסיף פוסטים באמצעות התכונות של Firebase Realtime Database.
אתה יכול גם להתאים את השלבים במעבדת קוד זה כדי לבדוק את האפליקציה שלך.
דרישות מוקדמות
מה אתה צריך
- Xcode 12.5+
- לבדיקת App Attest:
- חשבון Apple Developer המאפשר לך ליצור מזהי אפליקציות חדשים
- אפליקציה עם מזהה אפליקציה מפורש עם יכולת App Attest מופעלת. עיין במאמרי רישום מזהה אפליקציה והפעלת יכולות אפליקציה אם אתה זקוק לעזרה בתהליך.
- מכשיר iOS/iPadOS התומך ב- App Attest
- פרויקט Firebase עם:
- אפליקציית iOS מוגדרת ( למידע נוסף )
- Google Analytics , Remote Config ו- App Check מופעלים
- גישה לפרויקט Firebase המשויך לאפליקציה שלך, עם הרשאות ליצור ולנהל תצורה מרחוק ולהציג את Google Analytics
2. צור ספק אישור מותאם אישית
בשלב זה, ניצור מחלקת ספקים מותאמת אישית כדי לספק אסימון רק כאשר App Attest מופעל. Config מרחוק מסתמך על מופע מוגדר של אפליקציית Firebase, והספק המותאם אישית שאתה מיישם בשלב זה משמש כמציין המיקום כדי לסיים את התצורה.
כדי להשלים את השלבים הבאים, תצטרך להוסיף Firebase
, FirebaseRemoteConfig
ו- FirebaseAnalytics
בקטע 'מסגרות', ספריות ותוכן מוטבע של האפליקציה שלך ב-Xcode. לדוגמא כיצד לעשות זאת, עיין בבדיקת מעבדת הקוד של אפליקציית Firebase עבור פלטפורמות Apple .
- צור קובץ " MyAppCheckProvider " שהוא תת-סיווג של
NSObject
התואם את פרוטוקולAppCheckProvider
. - כלול שיטה ריקה
getToken()
שתמלא מאוחר יותר.
ראה את הקוד לדוגמה הבא עבור מחלקת הספק המותאם אישית עם שיטת getToken()
הריקה.
// MyAppCheckProvider.swift
import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig
class MyAppCheckProvider: NSObject, AppCheckProvider {
func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}
כדי ליצור מופע AppAttestProvider
, תצטרך להעביר מופע של FirebaseApp
המתאים. צור עבורו מאפיין מאוחסן וקבל אותו כפרמטר אתחול:
// MyAppCheckProvider.swift
import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig
class MyAppCheckProvider: NSObject, AppCheckProvider {
// Firebase app instance served by the provider.
let firebaseApp: FirebaseApp
// The App Check provider factory should pass the FirebaseApp instance.
init(app: FirebaseApp) {
self.firebaseApp = app
super.init()
}
func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}
העבר את בקשת האסימון לספק App Attest
עכשיו יש לך הכל כדי להעביר את בקשת האסימון לספק App Attest בשיטת getToken()
שלך.
הערה: למד עוד על שיטת getToken()
ב- FirebaseAppCheck Framework Reference .
הוסף את הקוד הבא לשיטת getToken()
שלך:
// MyAppCheckProvider.swift
import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig
class MyAppCheckProvider: NSObject, AppCheckProvider {
// Firebase app instance served by the provider.
let firebaseApp: FirebaseApp
// The App Check provider factory should pass the FirebaseApp instance.
init(app: FirebaseApp) {
self.firebaseApp = app
super.init()
}
private lazy var appAttestProvider = AppAttestProvider(app: firebaseApp)
func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
// Fetch App Attest flag from Remote Config
let remoteConfig = RemoteConfig.remoteConfig(app: firebaseApp)
remoteConfig.fetchAndActivate { remoteConfigStatus, error in
// Get App Attest flag value
let appAttestEnabled = remoteConfig.configValue(forKey: "AppAttestEnabled").boolValue
guard appAttestEnabled else {
// Skip attestation if App Attest is disabled. Another attestation
// method like DeviceCheck may be used instead of just skipping.
handler(nil, MyProviderError.appAttestIsDisabled)
return
}
// Try to obtain an App Attest provider instance and fail if cannot
guard let appAttestProvider = self.appAttestProvider else {
handler(nil, MyProviderError.appAttestIsUnavailable)
return
}
// If App Attest is enabled for the app instance, then forward the
// Firebase App Check token request to the App Attest provider
appAttestProvider.getToken(completion: handler)
}
}
}
enum MyProviderError: Error {
case appAttestIsDisabled
case appAttestIsUnavailable
case unexpected(code: Int)
}
הקוד הקודם בודק פרמטר בוליאני AppAttestEnabled
Remote Config (פרמטר Remote Config זה ייווצר מאוחר יותר במעבדת הקוד). אם הערך הוא שקר, הקוד נכשל, מה שמצביע על כך ש-App Check לא מתגלגל במכשיר הנוכחי. אם הערך נכון, הקוד מנסה להשיג ספק App Attest ונכשל אם הוא לא מצליח. אם בדיקות השגיאה הללו יעברו, הקוד יעביר את בקשת האסימון לספק App Attest.
הוסף אירועי Analytics
על ידי הוספת אירועים של Analytics, אתה מקבל תובנות טובות יותר לגבי מידת ההצלחה של השקת App Check. Analytics יעזור לקבוע אם App Attest צריך להיות מופעל עבור קהל גדול יותר.
רישום שני אירועי Analytics: AppAttestSuccess על הצלחה ו- AppAttestFailure על כישלון. שני אירועי Analytics אלה יכולים לעזור לעקוב אחר הצלחת השקת App Check שלך ולעזור לך להחליט אם יש להמשיך בהשקה גדולה יותר.
func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
// Fetch Remote Config.
let remoteConfig = RemoteConfig.remoteConfig(app: firebaseApp)
remoteConfig.fetchAndActivate { remoteConfigStatus, error in
// Get App Attest flag value from Remote Config.
let appAttestEnabled = remoteConfig.configValue(forKey: "AppAttestEnabled").boolValue
guard appAttestEnabled else {
// Skip attestation if App Attest is disabled. Another attestation
// method like DeviceCheck may be used instead of just skipping.
handler(nil, MyProviderError.appAttestIsDisabled)
return
}
// Try to obtain an App Attest provider instance and fail otherwise.
guard let appAttestProvider = self.appAttestProvider else {
handler(nil, MyProviderError.appAttestIsUnavailable)
return
}
// If App Attest is enabled for the app instance, then forward the
// Firebase App Check token request to the App Attest provider.
appAttestProvider.getToken { token, error in
// Log an Analytics event to track attestation success rate.
let appAttestEvent: String
if (token != nil && error == nil) {
appAttestEvent = "AppAttestSuccess"
} else {
appAttestEvent = "AppAttestFailure"
}
Analytics.logEvent(appAttestEvent, parameters: nil)
// Pass the result to the handler
handler(token, error)
}
}
}
3. עדכן את המחלקה של ספק מפעל
לאחר שיישמת את ההיגיון להעביר את בקשת האסימון לספק App Attest והוספת כמה אירועי Analytics, עליך לעדכן את MyAppCheckProviderFactory.class
שיצרת במעבדת הקוד של App Check for Apple Platforms . מחלקה זו תכוון לספק ניפוי באגים של App Check עבור סימולטורים, ובדרך אחרת תכוון לספק המותאם אישית שלך.
ערוך את הקוד הבא במחלקה MyAppCheckProviderFactory
שיצרת במעבדת הקוד של Firebase App Check for platforms Apple :
// MyAppCheckProviderFactory.swift
import Firebase
class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
#if targetEnvironment(simulator)
// App Attest is not available on simulators.
// Use a debug provider.
let provider = AppCheckDebugProvider(app: app)
// Print only locally generated token to avoid a valid token leak on CI.
print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")
return provider
#else
if #available(iOS 14.0, *) {
// Use your custom App Attest provider on real devices.
return MyAppCheckProvider(app: app)
} else {
return DeviceCheckProvider(app: app)
}
#endif
}
}
אשר שהגדרת את AppCheckProviderFactory
לפני הגדרת FirebaseApp
:
// DatabaseExampleApp.swift
import SwiftUI
import Firebase
import FirebaseAppCheck
@main
struct DatabaseExampleApp: App {
init() {
AppCheck.setAppCheckProviderFactory(MyAppCheckProviderFactory())
FirebaseApp.configure()
}
// ...
}
4. הוסף פרמטר Config מרחוק במסוף Firebase
כעת תוסיף את הפרמטר Remote Config AppAttestEnabled למסוף Firebase. שיטת getToken
שלך דורשת פרמטר זה.
כדי ליצור פרמטר Config מרחוק במסוף Firebase:
- פתח את התצורה המרוחקת עבור הפרוייקט שלך ולחץ על הוסף פרמטר . אם זו הפעם הראשונה שאתה משתמש בתצורה מרחוק, לחץ על צור תצורה .
- בשדה שם פרמטר (מפתח) , הזן
AppAttestEnabled
. - מהתפריט הנפתח סוג נתונים , בחר בוליאני .
- מהתפריט הנפתח ערך ברירת מחדל, בחר false .
לפני לחיצה על שמור, צור ערך מותנה עבור 10% מהמשתמשים:
- לחץ על הוסף חדש > ערך מותנה > צור תנאי חדש .
- בשדה שם , הזן שם תנאי.
- תחת חל אם... , בחר משתמש באחוזון אקראי , <= , ולאחר מכן הזן 10 בשדה % .
- לחץ על צור תנאי .
הגדר את הערך המותנה ל- true כך ש-App Attest יושק ל-10% מהמשתמשים שלך.
- הגדר את הערך ל- true עבור התנאי שזה עתה יצרת.
- לחץ על שמור .
כשתסיים, פרסם את השינויים בתצורה מרחוק.
בדוק את ההשקה במכשיר שלך
כדי לבדוק את ערכי הדגל השונים של תצורה מרוחקת במכשיר שלך מבלי לשנות את קוד האפליקציה, הגדר ניסוי בפרמטר AppAttestEnabled בעקבות המדריך צור Firebase Remote Config Experiments with A/B Testing . קטע ההדרכה " אמת את הניסוי שלך במכשיר בדיקה " מסביר כיצד להקצות ערכים שונים למכשיר הבדיקה שלך.
השלב האחרון הוא להשתמש ב-Google Analytics כדי לעקוב אחר הצלחת השקת App Attest שלך.
5. סקור את הצלחת השקת AppCheck שלך
אתה יכול למדוד את הצלחת ההשקה שלך בלוח המחוונים של Analytics Events. צפו באירועי AppAttestSuccess ו- AppAttestFailure . ייתכן שיחלפו עד 24 שעות לראות אירועים בלוח המחוונים. לחלופין, תוכל להפעיל איתור באגים ולהשתמש ב-DebugView כדי לראות אירועי ניפוי באגים מהר יותר.
לחלופין, אתה יכול לעקוב אחר לוח המחוונים של Crashlytics לאיתור עליות בשיעורי הקריסה. למידע נוסף על הוספת Crashlytics לאפליקציה שלך, ראה תחילת העבודה עם Firebase Crashlytics .
ברגע שאתה רואה בעיקר אירועי AppAttestSuccess ומעט אירועי AppAttestFailure , זה סימן טוב שאתה יכול להגדיל את אחוז המשתמשים עם App Attest מופעל על ידי שינוי התנאי בפרמטר Remote Config AppAttestEnabled .
אופציונלי: נצל את הקהל של Google Analytics
אם ברצונך למנף עוד יותר את אירוע AppAttestEnabled Analytics, תוכל ליצור קהל ב-Analytics למעקב אחר משתמשים כאשר AppAttestEnabled מוגדר כ-true.
App Attest שוחרר עם iOS 14.0. ייתכן שחלק מהמשתמשים שלך אינם בגרסה זו, ולכן אינם זכאים ל-App Attest. אתה יכול לרשום אירוע אחר ב-Analytics כדי לעקוב אחר משתמשים אלה, ואז למקד לקהל זה לשיטת אישור אחרת, כגון DeviceCheck .
אופציונלי: השתמש ב-Cashlytics כדי לנטר קריסות
כדי להבין טוב יותר את היציבות של האפליקציה שלך במהלך ההשקה, השתמש ב- Firebase Crashlytics כדי לנטר קריסות וללא קטלניות.
6. מזל טוב!
השקת בהצלחה את App Check עם Remote Config 🎉