שימוש ב-App Check כדי לאבטח את Navigation SDK ל-iOS
Firebase App Check מספקת הגנה מפני קריאות מהאפליקציה שלך ל-Google Maps Platform על ידי חסימת תעבורת נתונים שמגיעה ממקורות שאינם האפליקציות הלגיטימיות שלך. היא עושה זאת על ידי בקשת הערכה של האותנטיות של האפליקציה או המכשיר מספק אימות כמו App Attest. כשמשלבים את האפליקציה עם App Check, מוסיפים הגנה מפני בקשות זדוניות ולא מורשות, וכך מונעים חיובים לא מורשים. בנוסף, App Check משפר באופן משמעותי את הדיווח על שיבושים בזמן אמת במערכת האפליקציות שלכם, וכך מועיל לכל הנהגים שמשתמשים באפליקציה. מידע נוסף זמין במאמר בנושא דיווח על שיבושים.
למה להשתמש ב-App Check?
App Check מגן על שני תחומים נפרדים ב-Navigation SDK ל-iOS: פונקציונליות הניווט הראשית ודיווח על שיבושים.
ניווט
App Check מסייע בחסימת בקשות SDK הניווט הראשי עבור iOS ממקורות זדוניים או לא מורשים. ההגנה הזו מועילה לכם ישירות כי היא מונעת הונאות שקשורות לחיוב וניצול מלא של המכסות בפרויקט.
דיווח על שיבושים
מומלץ מאוד להשתמש ב-App Check אם האפליקציה שלכם תומכת ביכולות דיווח והצבעה בזמן אמת על שיבושים. הפעלת App Check מבטיחה שהנהגים יקבלו את המסלולים המדויקים ביותר, תוך התחשבות בכל המשוב בזמן אמת.
למה חשוב להשתמש ב-App Check לצורך דיווח:
- רף האמון הגבוה לסגירות: אירועים המשפיעים על המסלול, כגון סגירת כבישים, יכולים לשנות באופן משמעותי את התנהגות המסלול עבור כל הנהגים. כדי להגן על המפה מפני ונדליזם, ספאם או דיווחים לא מדויקים, תשתית הפיקוח של Google על שיבושים שגורמים לסגירת כבישים מסתמכת על אותות חזקים של תקינות המכשיר ותקינות האפליקציה.
- איך App Check מאמת את הדוחות: דוחות והצבעות של משתמשים שנשלחים מ-Navigation SDK ל-iOS כוללים את אסימון App Check. ה-Backend של Google משתמש באסימון כדי לאמת את הלגיטימיות של המשוב, וכך מעלה את רמת האמינות שלו ומאפשר להעריך את ההשפעה שלו על המפה בזמן אמת.
- ההשפעה של השמטת App Check: דוחות המוגשים ללא אסימון App Check תקף מוערכים תחת מודל בעל אמון נמוך יותר וייתכן שיעובדו אך ורק כאותות שקטים. משמעות הדבר היא שבעוד שהמשתמשים שלך עדיין יכולים לדווח ולהצביע, הדיווחים שלהם פחות צפויים להיות גלויים במפה או להשפיע על מסלולי הנהיגה של נהגים אחרים וידרשו אימות נוסף.
האם App Check מתאים לי?
ברוב המקרים מומלץ להשתמש ב-App Check, אבל אין צורך להשתמש בו או שהוא לא נתמך בתרחישים הבאים:
- אפליקציות פרטיות או ניסיוניות: אם האפליקציה לא נגישה לציבור, לא צריך להשתמש ב-App Check.
- מכשירים שנפרצו: ספקי האימות המומלצים מונעים את ההפעלה של Navigation SDK for iOS במכשירים לא מהימנים, כמו טלפונים עם הרשאות רוט או טלפונים פרוצים. כדי לתמוך במכשירים האלה, צריך לפרוס ספק אימות בהתאמה אישית.
סקירה כללית של שלבי היישום
כדי לשלב את האפליקציה עם App Check, פועלים לפי השלבים הבאים:
- מוסיפים את Firebase לאפליקציה.
- מוסיפים את ספריית App Check ומפעילים את App Check.
- הוספת ספק טוקנים. בשלב הזה מופעל ספק האימות שבחרתם כדי לאמת את תקינות המכשיר או האפליקציה.
- מאתחלים את ממשקי ה-API של Navigation ו-App Check.
- מפעילים את ניפוי הבאגים. האפשרות הזו שימושית במהלך הפיתוח או בסביבות של אינטגרציה רציפה (CI).
- מומלץ לעקוב אחרי הבקשות של האפליקציה לפני שמפעילים את האכיפה. כך תוכלו לאכוף את השימוש ב-App Check בצורה חלקה בלי לשבש את חוויית המשתמש.
שיקולים בתכנון שילוב של App Check
- מכסות של ספקי אימות: ספקי האימות שאנחנו ממליצים עליהם, DeviceCheck או App Attest, כפופים למכסות ולמגבלות שנקבעו על ידי Apple.
- השהיית הפעלה: ברוב המצבים, המשתמשים שלך לא יחוו השהייה במהלך שימוש רגיל, מכיוון שאסימוני App Check מאוחסנים במטמון במכשיר. המערכת מרעננת אוטומטית את האסימונים של App Check ברקע לפני שהתוקף שלהם פג, כדי לשמור על ביצועים חלקים. עם זאת, אם לא קיים טוקן תקף של App Check, משתמשי האפליקציה יחוו השהיה מסוימת בהפעלה. לדוגמה, השהייה הזו מתרחשת במהלך הפעלות קרות כשפג התוקף של טוקן שנשמר במטמון או כשהוא חסר.
- אורך החיים של הטוקן: אורך החיים (TTL) קובע את משך הזמן שבו הטוקן של App Check תקף לפני שצריך לרענן אותו. אפשר להגדיר את משך הזמן הזה מ-30 דקות עד 7 ימים במסוף Firebase. מומלץ להגדיר משך זמן של שעה כערך בסיסי מאובטח, אבל ה-SDK מנסה לבצע רענונים ברקע באופן אוטומטי בערך בחצי ממשך ה-TTL. הוראות מפורטות לשימוש במסוף זמינות בתיעוד של Firebase App Check.
שילוב האפליקציה עם App Check
דרישות מוקדמות ודרישות
- אפליקציה עם Navigation SDK ל-iOS בגרסה 11.0 ואילך.
- מזהה החבילה של האפליקציה.
- מזהה הצוות שלך מכרטיסיית החברות במסוף המפתחים של Apple.
- אם אתם מתכננים להשתמש ב-DeviceCheck, תצטרכו את קובץ המפתח הפרטי ואת מזהה המפתח.
- אתם צריכים להיות הבעלים של האפליקציה ב-מסוף Google Cloud.
- מזהה הפרויקט של האפליקציה במסוף Google Cloud.
שלב 1: מוסיפים את Firebase לאפליקציה
פועלים לפי ההוראות במסמכי התיעוד למפתחים של Firebase כדי להוסיף את Firebase לאפליקציה. מוסיפים את הקובץ GoogleService-Info.plist ללא שינוי לרמת הבסיס של הפרויקט.
בקובץ AppDelegate, מייבאים את המודולים הבאים:
Swift
import FirebaseCore import FirebaseAppCheck import GoogleNavigation
Objective-C
@import FirebaseCore; @import FirebaseAppCheck; @import GoogleNavigation;
שלב 2: מוסיפים את ספריית App Check ומפעילים את App Check
ב-Firebase יש הוראות לכל ספק אימות ברירת מחדל. במאמר הזה מוסבר איך להגדיר פרויקט ב-Firebase ולהוסיף את ספריית App Check לאפליקציה. כדי לאתחל את App Check, צריך לפעול לפי דוגמאות הקוד שמופיעות כאן.
- פועלים לפי ההוראות של Firebase כדי להוסיף את ספריית App Check:
- אתחול App Check ב-
AppDelegateשלך:- אם אתם משתמשים ב-App Attest, אתם צריכים ליצור הטמעה של
AppCheckProviderFactoryולרשום אותה לפני שמתקשרים אלFirebaseApp.configure():Swift
class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { return AppAttestProvider(app: app) } } // In application(_:didFinishLaunchingWithOptions:) let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) FirebaseApp.configure()
Objective-C
#import <FirebaseCore/FirebaseCore.h> #import <FirebaseAppCheck/FirebaseAppCheck.h> @interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory> @end @implementation YourAppCheckProviderFactory - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app { return [[FIRAppAttestProvider alloc] initWithApp:app]; } @end // In application:didFinishLaunchingWithOptions: YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
- אם אתם משתמשים ב-DeviceCheck במקום זאת, צריך להגדיר את הפקטורי (factory) באמצעות הפעולות הבאות:
Swift
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Objective-C
FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- אם אתם משתמשים ב-App Attest, אתם צריכים ליצור הטמעה של
שלב 3: מוסיפים את ספק הטוקנים
יוצרים קובץ בשם AppCheckTokenProvider (או, אם משתמשים ב-Objective-C, שני קבצים בשם AppCheckTokenProvider.h ו-AppCheckTokenProvider.m) ברמת הבסיס של האפליקציה.
מחלקה זו חייבת להתאים לפרוטוקול GMSAppCheckTokenProvider וליישם את המתודה fetchAppCheckTokenWithCompletion.
Swift
import Foundation import FirebaseAppCheck import GoogleNavigation class AppCheckTokenProvider: NSObject, GMSAppCheckTokenProvider { func fetchAppCheckToken(completion: @escaping (String?, Error?) -> Void) { AppCheck.appCheck().token(forcingRefresh: false) { token, error in if let error = error { print("App Check Error: \(error)") completion(nil, error) return } guard let token = token else { completion(nil, NSError(domain: "AppCheck", code: -1, userInfo: [NSLocalizedDescriptionKey: "Token is nil"])) return } print("App Check Token: \(token.token)") completion(token.token, nil) } } }
Objective-C
// AppCheckTokenProvider.h #import <Foundation/Foundation.h> #import <GoogleNavigation/GoogleNavigation.h> NS_ASSUME_NONNULL_BEGIN @interface AppCheckTokenProvider : NSObject <GMSAppCheckTokenProvider> @end NS_ASSUME_NONNULL_END
// AppCheckTokenProvider.m #import "AppCheckTokenProvider.h" #import <FirebaseAppCheck/FirebaseAppCheck.h> @implementation AppCheckTokenProvider - (void)fetchAppCheckTokenWithCompletion:(void (^)(NSString * _Nullable token, NSError * _Nullable error))completion { [[FIRAppCheck appCheck] tokenForcingRefresh:NO completion:^(FIRAppCheckToken * _Nullable token, NSError * _Nullable error) { if (token) { completion(token.token, nil); } else { completion(nil, error); } }]; } @end
שלב 4: הפעלת ה-API של Navigation ושל App Check
מאתחלים את Navigation SDK ל-iOS (באמצעות GMSServices) ורושמים את מופע ספק הטוקנים על ידי המרת הטיפול המשותף בשירותים אטומים ל-GMSServices:
Swift
// In application(_:didFinishLaunchingWithOptions:) GMSServices.provideAPIKey("YOUR_API_KEY") // Register your App Check token provider before initializing Navigation SDK for iOS if let services = GMSServices.sharedServices() as? GMSServices { services.appCheckTokenProvider = AppCheckTokenProvider() }
Objective-C
// In application:didFinishLaunchingWithOptions: [GMSServices provideAPIKey:@"YOUR_API_KEY"]; // Register your App Check token provider before initializing Navigation SDK for iOS ((GMSServices *)[GMSServices sharedServices]).appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];
שלב 5: הפעלת ניפוי שגיאות (אופציונלי)
אחרי שאוכף השימוש ב-App Check ב-Navigation SDK ל-iOS, התכונות של האפליקציה שתלויות ב-Navigation SDK ל-iOS לא יפעלו בסימולטור או בסביבת שילוב רציף (CI), כי הסביבות האלה לא עומדות בדרישות של מכשירים תקינים. כדי להריץ את האפליקציה בסביבות האלה במהלך הפיתוח והבדיקות, צריך ליצור גרסת ניפוי באגים של האפליקציה שמשתמשת בספק ניפוי הבאגים של App Check במקום בספק אימות בסביבת ייצור.
- מגדירים את מפעל ספקי אימות לצורכי ניפוי באגים ב-
AppDelegate:Swift
#if targetEnvironment(simulator) let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif AppCheck.setAppCheckProviderFactory(providerFactory)
Objective-C
#if TARGET_OS_SIMULATOR id<FIRAppCheckProviderFactory> providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init]; #else id<FIRAppCheckProviderFactory> providerFactory = [[YourAppCheckProviderFactory alloc] init]; #endif [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- הפעל רישום בפרויקט Xcode שלך, הפעל את האפליקציה ואתר את אסימון ניפוי השגיאות המקומי ביומן הקונסולה.
- מעתיקים את טוקן הניפוי הזה ומוסיפים אותו למסוף Firebase. לפרטים נוספים, עיינו במסמכי העזרה בנושא ספק אימות לצורכי ניפוי באגים של Firebase App Check.
שלב 6: מעקב אחרי בקשות האפליקציה והחלטה על אכיפה
לפני שמפעילים את האכיפה, כדאי לעקוב אחרי הבקשות של האפליקציה כדי לוודא שלא תפריעו למשתמשים לגיטימיים.
- כדי לראות את אחוז התנועה המאומתת לעומת התנועה הלא מאומתת, עוברים למסך המדדים של App Check במסוף Firebase.
- אחרי שמוודאים שרוב התנועה מאומתת ושהמשתמשים הלגיטימיים עדכנו לגרסה של האפליקציה שכוללת את ההטמעה של App Check, מפעילים את האכיפה.
- אחרי שמפעילים את האכיפה, App Check דוחה את כל התנועה ללא טוקן תקף של App Check.