שימוש ב-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 עוזרת לחסום בקשות של Navigation SDK for 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 או שהוא לא נתמך בתרחישים הבאים:
- אפליקציות פרטיות או ניסיוניות: אם האפליקציה לא נגישה לציבור, לא צריך להשתמש ב-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 Developer Console.
- אם אתם מתכננים להשתמש ב-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 ולהטמיע את ה-method 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.